如何在python中等待任务列表?

rqmkfv5c  于 2022-12-17  发布在  Python
关注(0)|答案(2)|浏览(209)

在.Net c#中有一个函数Task.WhenAll,它可以获取一个等待它们的任务列表。我应该在python中使用什么呢?我尝试用这个函数做同样的事情:

tasks = ... #list of coroutines

for task in tasks:
 await task
hgqdbh6s

hgqdbh6s1#

将任务添加到列表后,应该使用asyncio.gather,它将协程作为参数列表并异步执行它们,也可以使用asyncio.create_task,它接受协程并在事件循环中调用并发任务。

import asyncio

async def coro(i):
    await asyncio.sleep(i//2)

async def main():
    tasks = []
    for i in range(5):
        tasks.append(coro(i))
    await asyncio.gather(*tasks)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()
gudnpqoy

gudnpqoy2#

如果你使用的是Python 3.7或更高版本,请使用asyncio.gather
并发运行aws序列中的可等待对象。如果aws中的任何可等待对象是协同程序,则会自动将其调度为任务。如果所有可等待对象都成功完成,则结果是返回值的聚集列表。结果值的顺序与aws中的可等待对象的顺序相对应。

相关问题