wait 和 gather
两者都是在协程需要并发的时候使用。
-
wait接受一个协程列表,返回done, peding两个集合,done里面是完成任务的协程,pending表示仍在跑的协程,通过协程.result()的方法来获取完成的结果。
<coroutine object wait at 0x1095a17c8>
-
gather以gather(cro1, cro2, cro3, cro4…)的方式接受协程,返回的是一个结合了这么多个任务的协程
<_GatheringFuture pending>
,如果协程有返回值,则会返回协程充公运行之后的结果。
async def func1(num):
print('--func1 start--')
await asyncio.sleep(num)
print('--func1 done--')
return 'func1 ok'
async def func2(num):
print('--func2 start--')
await asyncio.sleep(num)
print('--func2 done--')
return 'func2 ok'
async def main():
task1 = asyncio.ensure_future(func1(3))
task2 = asyncio.ensure_future(func2(5))
tasks = [task1, task2]
res = await asyncio.gather(*tasks)
return res
# done, pending = await asyncio.wait(tasks)
# for t in done:
# print(t.result())
# print(done)
# print(pending)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
result = loop.run_until_complete(main())
print(result)
返回结果
--func1 start--
--func2 start--
--func1 done--
--func2 done--
['func1 ok', 'func2 ok']