如果你想让程序一次只处理一个完成的任务,可以使用asyncio.Queue
结合asyncio.create_task
来实现。下面是一个示例:
import asyncio
# 假设这是异步任务函数
async def async_task(task_id, delay, task_queue):
await asyncio.sleep(delay)
print(f"Task {task_id} finished after {delay} seconds.")
await task_queue.put(task_id)
async def process_task(task_queue):
while True:
task_id = await task_queue.get()
print(f"Processing task {task_id}...")
# 在此处处理任务...
task_queue.task_done()
async def main():
task_queue = asyncio.Queue()
# 创建并开始异步任务
tasks = [asyncio.create_task(async_task(i, i+1, task_queue)) for i in range(3)]
# 开始处理任务的协程
processing_task = asyncio.create_task(process_task(task_queue))
# 等待所有任务完成
await asyncio.gather(*tasks)
# 告诉任务队列所有任务已完成
#task_queue.join()
# 结束处理任务的协程
#processing_task.cancel()
# 运行主函数
asyncio.run(main())
在这个示例中,我们创建了一个异步任务队列,每当一个异步任务完成,它会将任务ID放入队列。然后,process_task
协程持续监听队列,一旦有新任务加入,它会立即取出并处理。由于get
方法是阻塞的,所以直到队列中有新的任务可用,才会处理下一个任务。当所有任务完成后,通过调用task_queue.join()
来等待所有任务被处理完毕。最后取消处理任务的协程以结束程序。
当前文章价值1.89元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)
评论已关闭!