条件变量是一种常用的协程同步机制,用于在协程之间传递信号。在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个元素为止。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。