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该协程。