首页后端开发Pythonpython-协程并发-多个协程的同步(三)

python-协程并发-多个协程的同步(三)

时间2023-04-27 06:57:01发布访客分类Python浏览416
导读:队列队列是一种常用的协程同步机制,用于在协程之间传递数据。在Python中,我们可以使用asyncio模块中的队列来实现协程的同步。asyncio.Queue是一个类似于标准库中Queue的同步原语,用于在协程之间传递数据。下面是一个简单的...

队列

队列是一种常用的协程同步机制,用于在协程之间传递数据。在Python中,我们可以使用asyncio模块中的队列来实现协程的同步。asyncio.Queue是一个类似于标准库中Queue的同步原语,用于在协程之间传递数据。

下面是一个简单的使用asyncio模块实现协程同步的示例代码:

import asyncio

async def producer(queue):
    for i in range(5):
        await asyncio.sleep(1)
        await queue.put(i)

async def consumer(queue):
    while True:
        item = await queue.get()
        print(f"consumer got item {
item}
    ")
        queue.task_done()

async def main():
    queue = asyncio.Queue()
    task1 = asyncio.create_task(producer(queue))
    task2 = asyncio.create_task(consumer(queue))
    await queue.join()
    task1.cancel()
    task2.cancel()

asyncio.run(main())

在这个示例代码中,我们定义了两个协程函数producer和consumer,并使用asyncio.Queue创建了一个队列queue。在producer中,我们每隔1秒向队列中放入一个元素。在consumer中,我们等待队列中有元素可取,并打印取出的元素。

在主函数main中,我们创建了两个协程任务task1和task2,并使用await关键字等待它们的完成。在这个示例代码中,producer和consumer会交替执行,直到producer放入了5个元素为止。

注意,在这个示例代码中,我们使用了queue.join()方法来等待所有元素都被取出。当队列中的所有元素都被取出时,queue.join()方法会返回,并且我们可以通过task1.cancel()和task2.cancel()方法来取消任务的执行。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

python

若转载请注明出处: python-协程并发-多个协程的同步(三)
本文地址: https://pptw.com/jishu/9967.html
好看免费的Python验证码 python-协程并发-多个协程的同步(二)

游客 回复需填写必要信息