模拟多个生产者,多个消费者,共享多个缓冲区的情形,输出结果需要有生产了什么,消费了什么,慵懒多少时间,用pythonshixian
时间: 2024-10-25 22:18:46 浏览: 16
在Python中,我们可以模拟一个经典的生产者-消费者模型,使用`multiprocessing`模块创建多个线程来分别代表生产者和消费者,以及共享队列作为缓冲区。下面是一个简单的例子:
```python
import multiprocessing
import time
import random
# 定义生产者函数
def producer(queue, sleep_time):
while True:
item = f"Produced item {random.randint(0, 10)}"
queue.put(item)
print(f"{time.ctime()}: Producer produced {item}")
time.sleep(sleep_time)
# 定义消费者函数
def consumer(queue, sleep_time):
while True:
if not queue.empty():
item = queue.get()
print(f"{time.ctime()}: Consumer consumed {item}")
time.sleep(sleep_time)
else:
print(f"{time.ctime()}: Buffer is empty, Consumer is idle.")
# 创建共享缓冲区和线程池
buffer_size = 5
queue = multiprocessing.Queue(buffer_size)
producer_process = [multiprocessing.Process(target=producer, args=(queue, 2)) for _ in range(3)] # 生产者数量
consumer_process = [multiprocessing.Process(target=consumer, args=(queue, 1)) for _ in range(4)] # 消费者数量
# 启动进程
for proc in producer_process + consumer_process:
proc.start()
# 等待所有进程结束
for proc in producer_process + consumer_process:
proc.join()
print("Simulation finished.")
```
在这个例子中,我们有三个生产者和四个消费者。生产者随机生成一个字符串放入队列,而消费者从队列取出并消费这些元素。每个线程会定期休息指定的时间(这里是2秒和1秒)。当缓冲区满了(大小为5),新产生的项会被阻塞直到有消费者消费掉一些元素。
阅读全文