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

问题描述 投票:0回答:2

在 .Net C# 中,有一个函数

Task.WhenAll
可以获取任务列表来等待它们。我应该在 python 中使用什么?我正在尝试这样做:

tasks = ...  # list of coroutines
    
for task in tasks:
    await task
python async-await python-asyncio
2个回答
8
投票

将任务添加到列表后,您应该使用

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()

1
投票

如果您使用的是 Python 3.7 或更高版本,请使用

asyncio.gather
。来自文档:

同时运行 aws 序列中的可等待对象。 如果 aws 中的任何可等待项是协程,则会自动将其安排为任务。 如果所有可等待项均成功完成,则结果是返回值的聚合列表。结果值的顺序对应于 aws 中可等待的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.