python-协程并发-多个协程的同步(二)
导读:条件变量条件变量是一种常用的协程同步机制,用于在协程之间传递信号。在Python中,我们可以使用asyncio模块中的条件变量来实现协程的同步。asyncio.Condition是一个类似于标准库中Condition的同步原语,用于协调多个...
条件变量
条件变量是一种常用的协程同步机制,用于在协程之间传递信号。在Python中,我们可以使用asyncio模块中的条件变量来实现协程的同步。asyncio.Condition是一个类似于标准库中Condition的同步原语,用于协调多个协程之间的等待和通信。
下面是一个简单的使用asyncio模块实现协程同步的示例代码:
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个元素为止。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: python-协程并发-多个协程的同步(二)
本文地址: https://pptw.com/jishu/9968.html