python async 从任务队列中取出任务 保证每次有5个任务执行
时间: 2024-03-10 16:43:48 浏览: 66
你可以使用Python的asyncio模块来实现异步任务的并发执行,并从任务队列中不断取出任务以保证每次有5个任务执行。以下是一个示例代码:
```python
import asyncio
from queue import Queue
async def task():
# 这里是你的异步任务代码
pass
async def worker(q):
while True:
# 从任务队列中取出任务
task = await q.get()
try:
# 执行任务
await task
except Exception as e:
print(f"Failed to execute task: {e}")
finally:
# 标记任务已完成
q.task_done()
async def main():
# 创建一个任务队列
q = Queue()
# 向队列中添加任务
for i in range(10):
q.put_nowait(asyncio.ensure_future(task()))
# 创建5个worker协程来执行任务
workers = []
for i in range(5):
workers.append(asyncio.ensure_future(worker(q)))
# 等待所有任务完成
await q.join()
# 取消所有worker协程
for worker in workers:
worker.cancel()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
在这个示例代码中,我们创建了一个名为task的异步任务函数,并将它添加到一个任务队列中。然后,我们创建了5个worker协程来不断从队列中取出任务并执行。最后,我们等待所有任务完成,并取消所有worker协程。注意,我们使用Queue类来创建任务队列,并使用q.task_done()方法来标记任务已完成。
阅读全文