其他人完成后在后台运行异步任务

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

我有 X 个使用 asyncio.gather() 执行的异步任务,它们是在循环中创建的。这些任务完成后,我需要运行一个异步任务来执行一些操作。但是,我不想等待此任务完成后再继续下一次迭代(这样我可以创建新的 X 任务)。

处理这种情况的最佳方法是什么?

不对单个任务执行await可能会导致其不被调用的情况。

python multithreading asynchronous concurrency python-asyncio
1个回答
0
投票

您可以通过使用

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

这应该允许您的后台任务运行,而不会阻止在下一次迭代中创建新任务。

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