Python3 asyncio 基本示例
import asyncio, time
async def a(s):
import time
await asyncio.sleep(1)
print(s)
async def b():
asyncio.ensure_future(a('asd'))
asyncio.ensure_future(a('qwe'))
await asyncio.sleep(2)
print('b')
loop = asyncio.get_event_loop()
B = b()
loop.run_until_complete(B)
要注意的有几个地方:
async def
的函数在哪里都可以调用,但是在调用的时候,必须显式等待其结束,否则会出现RuntimeWarning: coroutine 'xxx' was never awaited
。在async
函数中调用async
函数的话,可以使用await
关键字直接阻塞等待;在非async
函数中则必须设置事件循环器event looper
,然后通过事件循环器对所有的异步async
函数进行阻塞式等待,避免主线程在子线程完成前退出;- 在协程中休眠线程不能用
time.sleep()
,而应该用asyncio.sleep()
,否则休眠的是整个进程而不是目标协程; asyncio.ensure_future()
比较有意思,提供了类似“用完就扔”的协程运行模式,不必在后续显式await
该协程。