python-协程并发-多个协程的同步(三)
导读:队列队列是一种常用的协程同步机制,用于在协程之间传递数据。在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-协程并发-多个协程的同步(三)
本文地址: https://pptw.com/jishu/9967.html