1.问题描述:一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池,只要缓冲池未空,消费者可从缓冲池取走一个消息。 2.功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放数据、取数据等过程,
时间: 2024-01-05 18:03:36 浏览: 110
下面是一个使用Python multiprocessing模块实现生产者消费者模式的示例程序,其中使用了一个有界队列作为缓冲池:
```python
import multiprocessing
import time
import random
# 定义生产者进程
def producer(queue):
while True:
# 如果队列未满,生产一个随机数并加入队列
if not queue.full():
item = random.randint(1, 100)
queue.put(item)
print(f"[Producer] Put item {item} into queue")
time.sleep(random.randint(1, 3)) # 随机等待一段时间
# 定义消费者进程
def consumer(queue):
while True:
# 如果队列非空,从队列中取出一个元素并消费
if not queue.empty():
item = queue.get()
print(f"[Consumer] Get item {item} from queue")
time.sleep(random.randint(1, 3)) # 随机等待一段时间
# 主函数
if __name__ == '__main__':
queue = multiprocessing.Queue(5) # 创建一个有界队列,容量为5
producer_process = multiprocessing.Process(target=producer, args=(queue,))
consumer_process = multiprocessing.Process(target=consumer, args=(queue,))
producer_process.start()
consumer_process.start()
producer_process.join()
consumer_process.join()
```
在上面的程序中,生产者进程和消费者进程分别在循环中等待队列状态的变化,如果队列未满,则生产者进程生产一个随机数并加入队列中,如果队列非空,则消费者进程从队列中取出一个元素并消费。程序中使用了随机等待一段时间的方式模拟生产和消费的时间,在实际应用中可以根据需要调整等待时间。
运行程序后,可以看到生产者进程和消费者进程交替执行,并且在控制台上显示了队列的状态、放数据、取数据等过程。
阅读全文