异步IO
asyncio
是Python 3.4引入的标准库,内置了异步IO的支持。asyncio
的编程模型就是一个消息循环,可以从asyncio
模块中直接获取一个Eventloop的引用,然后把需要执行的协程放入Eventloop中执行就实现了异步IO。
以下是一个asyncio
的简单示例:
import asyncio
@asyncio.coroutine
def hello():
print('hello world.')
r = yield from asyncio.sleep(1)
print('hello again')
loop = asyncio.get_event_loop()
loop.run_until_complete(hello())
loop.close()
@asyncio.coroutine
把一个生成器标记为coroutine类型,然后就把这个coroutine放入Eventloop中执行。yield from
可以让我们方便的调用另一个生成器,由于示例中asyncio.sleep()
也是一个协程,所以线程不会等待,而直接去执行下一个消息循环了。在此期间,主线程并未做任何等待操作,而是直接去执行Eventloop中其他可以执行的协程,因此就实现了并发执行。
在实际应用中,只需要把yield from
这里抛出真正消耗时间的IO操作就可以实现多个协程由一个线程执行。