Python中如何实现基于队列的协程任务处理

2023-04-11 00:00:00 python 队列 如何实现

在Python中,可以通过使用asyncio模块来实现基于队列的协程任务处理。下面是一个简单的例子:

import asyncio

async def worker(queue):
    while True:
        # 从队列中获取任务
        task = await queue.get()
        # 处理任务
        result = await do_work(task)
        # 输出结果
        print(result)
        # 标记任务已完成
        queue.task_done()

async def do_work(task):
    # 模拟一个耗时的任务
    await asyncio.sleep(1)
    # 返回结果
    return "Processed {}".format(task)

async def main():
    # 创建一个队列
    queue = asyncio.Queue()
    # 往队列中添加任务
    for i in range(10):
        await queue.put("pidancode.com {}".format(i))
    # 创建两个工作者协程
    workers = [worker(queue) for _ in range(2)]
    # 等待所有任务都被处理完
    await queue.join()
    # 取消所有工作者协程
    for w in workers:
        w.cancel()

asyncio.run(main())

在这个例子中,我们定义了一个worker协程,它从一个队列中取出任务,处理任务并输出结果,最后标记任务已完成。我们还定义了一个do_work协程,它模拟了一个耗时的任务并返回结果。main协程中,我们创建了一个队列并往里面添加了10个任务,创建了两个worker协程来处理这些任务,并等待队列中的所有任务都被处理完。使用asyncio.run来运行主协程,完成整个事件循环。

这种基于队列的协程任务处理模式非常适合处理一些需要按顺序处理的任务,比如爬虫程序中需要按顺序访问一些网页。

相关文章