用Python实现生产者与消费者问题
时间: 2024-11-22 11:36:54 浏览: 7
在Python中,生产者消费者问题是经典的一个并发编程示例,它模拟了一个场景,其中有一些生产者线程负责生成数据,而其他消费线程则负责处理这些数据。这里我们通常会利用`queue`模块(在Python 3中,它是`queue`模块,但在2.x版本中是`Queue`模块)来作为共享资源。
下面是一个简单的Python实现:
```python
import queue
# 生产者函数
def producer(queue, data):
for _ in range(5): # 生产5个元素
item = f"Product {data}"
print(f"Producer added: {item}")
queue.put(item)
time.sleep(1) # 模拟生产时间
# 消费者函数
def consumer(queue):
while True:
item = queue.get()
if item is None: # 当队列为空时,停止消费并通知生产者
print("Queue is empty, stopping consumer.")
break
print(f"Consumer consumed: {item}")
queue.task_done() # 标记任务完成
# 创建队列,并设置最大长度
q = queue.Queue(maxsize=5)
# 启动生产者和消费者
producer_thread = threading.Thread(target=producer, args=(q, "A"))
consumer_thread = threading.Thread(target=consumer)
producer_thread.start()
consumer_thread.start()
# 等待所有任务完成后关闭生产者
producer_thread.join()
q.put(None) # 告诉消费者队列已完成所有生产任务
print("Finished")
```
在这个例子中,生产者往队列中添加产品,消费者从队列中取出并消费产品。当队列满时,生产者会被阻塞直到有消费者消耗掉一些产品;同样,当队列空时,消费者会被阻塞等待新的产品。通过这种方式,实现了生产者和消费者的同步。
阅读全文