python - 强制异步函数在下一个任务之前完成

标签 python async-await python-asyncio

我正在使用带有async函数的Python API包装器。我需要多次调用 API,并希望通过等待每个任务完成然后再进行下一次迭代来覆盖async 功能。

import asyncio
loop = asyncio.get_event_loop()
for count in range(5):
    loop.create_task(main(count)) # Need this line to complete before next iteration
    time.sleep(60) # Hacky solution

目前我只是在 sleep ,直到我可以假设 main() 完成。如何确保 main() 永远不会与其自身同时运行?

最佳答案

要等待任务完成,请使用await。这需要一个异步函数,您可以使用asyncio.run运行该函数:

async def x():
    for count in range(5):
        await main(count)

asyncio.run(x())

如果您想在顶级代码中执行相同的操作,只需根据需要多次调用 run_until_complete 即可:

loop = asyncio.get_event_loop()
for count in range(5):
    loop.run_until_complete(main(count))

关于python - 强制异步函数在下一个任务之前完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65148790/

相关文章:

python - 数据帧转换后保留标题

python - 是否可以生成随机对象变量名称并从 python 方法返回它们?如何?

javascript - Promise.all 和 for-await-of 的性能

python-3.x - 如何在异步上下文中读取 (hdf5) 文件?

python - 如何将基于回调的异步函数转换为异步生成器

python - 基于 2 列条件的 pandas 中的条件运行计数(根据时间戳计算队列中的人数)

python - 运行 docker-compose up 时出现 Errno 13

c# - 将异步 lambda 表达式转换为委托(delegate)类型 System.Func<T>?

javascript - return 不等待异步函数

python - 在 asyncio 中的 KeyboardInterrupt 之后等待任务完成