前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python-协程并发-多个协程的同步(二)

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

原创
作者头像
玖叁叁
发布2023-04-21 09:34:10
3460
发布2023-04-21 09:34:10
举报
文章被收录于专栏:玖叁叁

条件变量

条件变量是一种常用的协程同步机制,用于在协程之间传递信号。在Python中,我们可以使用asyncio模块中的条件变量来实现协程的同步。asyncio.Condition是一个类似于标准库中Condition的同步原语,用于协调多个协程之间的等待和通信。

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

代码语言:javascript
复制
import asyncio

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

async def consumer(condition, queue):
    async with condition:
        while True:
            await condition.wait()
            while not queue.empty():
                item = await queue.get()
                print(f"consumer got item {item}")

async def main():
    condition = asyncio.Condition()
    queue = asyncio.Queue()
    task1 = asyncio.create_task(producer(condition, queue))
    task2 = asyncio.create_task(consumer(condition, queue))
    await task1
    await task2

asyncio.run(main())

在这个示例代码中,我们定义了两个协程函数producer和consumer,并使用asyncio.Condition创建了一个条件变量condition和一个队列queue。在producer中,我们每隔1秒向队列中放入一个元素,并通过notify_all方法通知等待的消费者协程。在consumer中,我们等待条件变量的通知,然后从队列中取出元素并打印。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 条件变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档