队列是一种常用的协程同步机制,用于在协程之间传递数据。在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()方法来取消任务的执行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。