python开发Python协程Python

快乐的 asyncio 学习

2018-02-10  本文已影响80人  宝宝家的隔壁老王

其实 asyncio 的学习一点也不快乐

一、python 的多线程和多进程

要想理解 asyncio 的异步编程,需要简单了解一下 python 的多线程和多进程知识

python 有 GIL 机制,因此,python 的多线程操作并非真正意义的多线程,而仅仅在线程处于睡眠或者等待 I/O 时,才会发挥真正的多线程功能。

python多进程即其他语言中的多进程概念,不再累述

二、异步编程思想
1、Task 对象包含 协程(coro) 和协程调用时间2个属性;
2、Loop 对象使用堆承载多个 Task 对象,根据 Task 对象中最小调用时间去执行对应的 coro。如果 coro 没有迭代完,则将此 coro 生成新的 task,然后 push 到 Loop 对象的堆中。

# 简单的调用示例
import asyncio

@asyncio.coroutine
def coro_fun():
    yield from range(10)

loop = asyncio.get_event_loop()

loop.run_until_complete(coro_fun()) 
# or
tasks = [asyncio.ensure_future(coro_fun())]
loop.run_until_complete(asyncio.wait(tasks))
三、源代码分析
上一篇下一篇

猜你喜欢

热点阅读