我有 X 个使用 asyncio.gather() 执行的异步任务,它们是在循环中创建的。这些任务完成后,我需要运行一个异步任务来执行一些操作。但是,我不想等待此任务完成后再继续下一次迭代(这样我可以创建新的 X 任务)。
处理这种情况的最佳方法是什么?
不对单个任务执行await可能会导致其不被调用的情况。
您可以通过使用
asyncio.create_task()
在 asyncio.gather()
调用之后安排单个异步任务而不等待它来实现此目的。
您可以通过以下方式实现:
import asyncio
async def main():
while True:
# Create and run X tasks concurrently
tasks = [asyncio.create_task(some_async_function(i)) for i in range(X)]
await asyncio.gather(*tasks)
# Run the background task without awaiting it
asyncio.create_task(background_task())
# Optionally, add a condition to break the loop or continue as needed
if some_condition():
break
async def some_async_function(i):
# Your async task implementation
await asyncio.sleep(1)
print(f'Task {i} completed')
async def background_task():
# Your background task implementation
await asyncio.sleep(2)
print('Background task completed')
async def some_condition():
# Some condition to continue or break the loop
return False # Update with your actual condition
asyncio.run(main())
这应该允许您的后台任务运行,而不会阻止在下一次迭代中创建新任务。