请用python的生成器来模拟协程写生产者消费者?并请指明切换的代码是哪些
时间: 2024-04-13 10:30:02 浏览: 172
Python生成器实现简单生产者消费者模型代码实例
当使用生成器来模拟协程实现生产者消费者模型时,可以利用生成器函数的特性来实现协作式的任务切换。下面是一个简单的示例代码:
```python
def consumer():
while True:
item = yield
print("消费者消费了:", item)
def producer():
while True:
item = produce_item() # 生成一个物品
consumer.send(item) # 将物品发送给消费者
print("生产者生产了:", item)
def produce_item():
# 生成物品的逻辑,此处只是简单返回一个随机数
import random
return random.randint(1, 100)
# 创建消费者和生产者生成器对象
c = consumer()
p = producer()
# 执行消费者的初始化代码
next(c)
# 开始生产物品
for _ in range(5): # 假设只生产5个物品
next(p)
```
在上述代码中,`consumer` 函数是消费者的生成器函数,`producer` 函数是生产者的生成器函数。`consume` 函数中的 `yield` 表达式用于接收从生产者发送过来的物品,并进行消费。`producer` 函数中通过调用 `consumer.send(item)` 将生成的物品发送给消费者。
执行流程如下:
1. 创建消费者和生产者的生成器对象 `c` 和 `p`。
2. 调用 `next(c)` 初始化消费者。
3. 循环调用 `next(p)`,生产物品并发送给消费者。
4. 消费者接收到物品后打印,并继续等待下一个物品。
5. 生产者生产完指定数量的物品后结束。
在这个过程中,当生产者调用 `consumer.send(item)` 发送物品给消费者时,生成器函数会暂停执行并切换到消费者的 `yield` 表达式处,直到消费者处理完物品后,再切换回生产者继续执行。这样就实现了生产者和消费者之间的协作。
阅读全文