使用Queue类或Event类,编程实现线程同步生产者-消费者问题。 A.写出完整的程序代码 B.逐行解释程序的功能 C.调试与运行程序,分析运行结果。(三次)
时间: 2024-09-24 08:16:10 浏览: 43
生产者消费者问题.zip
A. 完整的Python代码示例:
```python
import threading
from queue import Queue
# 生产者线程
class Producer(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
for i in range(10):
item = f"Produced Item {i}"
print(f"Producer adding to queue: {item}")
self.queue.put(item)
# 线程暂停5秒,模拟生产过程
time.sleep(5)
# 消费者线程
class Consumer(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while True:
item = self.queue.get()
if item is None: # 标记队列空了
break
print(f"Consumer consuming from queue: {item}")
self.queue.task_done()
# 初始化队列和创建线程
queue = Queue()
producer = Producer(queue)
consumer = Consumer(queue)
# 启动线程
producer.start()
consumer.start()
# 等待所有任务完成
producer.join()
queue.put(None) # 消费者结束信号
consumer.join()
```
B. 逐行解释:
1. 导入必要的模块和线程库。
2. 定义生产者和消费者类,它们都继承自`threading.Thread`。
3. 生产者构造函数接收一个队列,并初始化线程。
4. 生产者的run方法,循环生成10个元素放入队列并睡眠5秒。
5. 消费者的run方法,从队列获取元素并处理,当队列为空时退出循环。
6. 创建队列和两个线程实例。
7. 启动生产者和消费者线程。
8. 主线程等待生产者和消费者线程执行完毕。
9. 生产者结束时,向队列添加None,作为消费者停止的信号。
10. 等待消费者线程也结束。
C. 调试与运行结果分析:
1. 运行程序可以看到生产者依次将10个物品放入队列,每放完一个,消费者会消费掉一个,直到队列空。
2. 生产者和消费者之间通过队列实现了同步,不会导致数据丢失或错乱。
3. 如果有额外的消费者加入,只要队列中有数据,新消费者就可以开始消费。
阅读全文