async io 异步IO asyncio 是python3.4 之后的协程模块,是python 实现并发重要的包,这个包使用事件循环驱动 实现并发。事件循环是一种处理多并发量的有效方式,在维基百科中它被描述为「一种等待程序分配事件或消息的 编程架构」,我们可以定义事件循环来简化使用轮询方法来监控事件,通俗的说法就是「当A 发生时,执行B」。 事件循环利用poller 对象,使得程序员不用控制任务的添加、删除和事件的控制。事件循环使用回调方法来知道事 件的发生。
import asyncio async def func1(): for i in range(5): #定义一个协程 print("协程A!!!") await asyncio.sleep(0) #人为的去模拟IO阻塞 让协程去实现自动切换 async def func2(): for i in range(5): #定义一个协程 print("协程B!!!") await asyncio.sleep(0) #获取循环事件 loop=asyncio.get_event_loop() #启动多个协程并行执行 loop.run_until_complete(asyncio.gather(func1(),func2())) loop.close()
协程的嵌套:使用async可以定义协程,协程用于耗时的io操作,我们也可以封装更多的io操作过程,这样就实现了嵌套 的协程,即一个协程中await了另外一个协程,如此连接起来。
#在一个协程里边使用async 嵌套另外一个协程实现并行的快速的计算结果 import asyncio async def print_sum(x, y): result = await compute(x, y) # 等待下一个协程计算 print("%s+%s=%s" % (x, y, result)) async def compute(x, y): print("开始计算x:%s和y:%s" % (x, y)) await asyncio.sleep(0) #等待计算结果出来之后再输出结果(上面的协程) return y + x loop=asyncio.get_event_loop() loop.run_until_complete(print_sum(10,20)) loop.close()