在.Net c#中有一个函数Task.WhenAll,它可以获取一个等待它们的任务列表。我应该在python中使用什么呢?我尝试用这个函数做同样的事情:
tasks = ... #list of coroutines for task in tasks: await task
hgqdbh6s1#
将任务添加到列表后,应该使用asyncio.gather,它将协程作为参数列表并异步执行它们,也可以使用asyncio.create_task,它接受协程并在事件循环中调用并发任务。
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()
gudnpqoy2#
如果你使用的是Python 3.7或更高版本,请使用asyncio.gather。并发运行aws序列中的可等待对象。如果aws中的任何可等待对象是协同程序,则会自动将其调度为任务。如果所有可等待对象都成功完成,则结果是返回值的聚集列表。结果值的顺序与aws中的可等待对象的顺序相对应。
2条答案
按热度按时间hgqdbh6s1#
将任务添加到列表后,应该使用
asyncio.gather
,它将协程作为参数列表并异步执行它们,也可以使用asyncio.create_task
,它接受协程并在事件循环中调用并发任务。gudnpqoy2#
如果你使用的是Python 3.7或更高版本,请使用
asyncio.gather
。并发运行aws序列中的可等待对象。如果aws中的任何可等待对象是协同程序,则会自动将其调度为任务。如果所有可等待对象都成功完成,则结果是返回值的聚集列表。结果值的顺序与aws中的可等待对象的顺序相对应。