在Python3.5中,可以使用queue
模块来创建多工作者协程。queue
模块提供了线程安全的队列数据结构,可以用于在多个协程之间传递数据。
下面是一个示例代码,演示了如何使用queue
模块创建多工作者协程:
import asyncio
import queue
async def worker(queue):
while True:
item = await queue.get()
# 处理任务
print("Processing item:", item)
await asyncio.sleep(1) # 模拟任务处理时间
queue.task_done()
async def main():
# 创建一个队列
q = queue.Queue()
# 创建多个工作者协程
num_workers = 3
workers = []
for _ in range(num_workers):
worker_coro = worker(q)
workers.append(worker_coro)
# 启动工作者协程
await asyncio.gather(*workers)
# 创建事件循环并运行主协程
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
在上面的代码中,首先定义了一个worker
协程函数,用于处理队列中的任务。然后,在main
协程函数中,创建了一个队列q
和多个工作者协程workers
。最后,通过asyncio.gather
函数启动了所有的工作者协程。
在实际使用中,可以将任务添加到队列中,供工作者协程处理。例如:
# 将任务添加到队列中
for i in range(10):
q.put(i)
# 等待所有任务完成
await q.join()
这样,多个工作者协程会并发地从队列中获取任务并处理,直到队列中的所有任务都被处理完毕。
关于queue
模块的更多信息,可以参考腾讯云的相关文档:queue模块文档
领取专属 10元无门槛券
手把手带您无忧上云