假设有一个仓库,仓库的容量为10。编写一个 Python 程序来模拟生产者-消费者场景。
时间: 2024-11-15 08:25:24 浏览: 10
在Python中,我们可以使用`threading`模块以及`queue`(也叫`Queue`)来模拟生产者-消费者模型。在这个场景中,生产者负责生成物品并放入队列,而消费者则从队列中取出物品消费。当队列满了,生产者需要等待;同样,如果队列为空,消费者也需要等待直到有新的物品可用。
下面是一个简单的例子:
```python
import threading
from queue import Queue
# 定义库存最大值
inventory_capacity = 10
inventory = Queue(inventory_capacity)
# 生产者函数
def producer():
global inventory
for _ in range(5): # 模拟生产5个产品
item = "Product" # 假设生产的是字符串产品
print(f"Producer produced {item}. Adding to inventory.")
if inventory.full(): # 队列已满,暂停生产
print("Inventory is full, producer will wait.")
inventory.join() # 等待队列中有空间
inventory.put(item) # 放入库存
# 消费者函数
def consumer():
global inventory
while True:
if not inventory.empty(): # 队列非空,开始消费
item = inventory.get()
print(f"Consumer consumed {item}. Inventory now has {inventory.qsize()}.")
else: # 队列为空,暂停消费
print("Inventory is empty, consumer will wait.")
inventory.task_done() # 消耗任务计数器减少
inventory.join() # 等待队列中有新的物品
# 启动线程
producer_thread = threading.Thread(target=producer)
consumer_thread = threading.Thread(target=consumer)
# 开始线程
producer_thread.start()
consumer_thread.start()
# 等待所有任务完成
producer_thread.join()
consumer_thread.join()
print("Both producer and consumer finished.")
阅读全文