异步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操作就可以实现多个协程由一个线程执行。