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

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

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

队列

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

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

代码语言:javascript
复制
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()方法来取消任务的执行。

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

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

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

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

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