现有一个最大长度为 20 的集合,需要实现一个生产者不停的往集合中添加数据,两个 消费者不停的从集合中取数据,当集合装满元素的时候,生产者停止生产,当队列为空时消费者停止消费的效果。请编写代码实现。
时间: 2024-02-20 20:56:27 浏览: 24
下面是一个基于Python的实现,使用了queue和threading库来实现生产者消费者模型:
```python
import queue
import threading
import time
# 定义一个最大长度为20的队列
q = queue.Queue(20)
# 定义一个生产者,不停向队列中添加数据
def producer():
count = 0
while True:
if q.full():
print('队列已满,停止生产')
break
else:
q.put(count)
print('生产者生产了数据:', count)
count += 1
time.sleep(0.5)
# 定义一个消费者,不停从队列中取出数据
def consumer(name):
while True:
if q.empty():
print('队列已空,停止消费')
break
else:
data = q.get()
print('%s消费了数据: %s' % (name, data))
time.sleep(1)
# 创建两个消费者线程
threads = []
threads.append(threading.Thread(target=consumer, args=('Consumer1',)))
threads.append(threading.Thread(target=consumer, args=('Consumer2',)))
# 启动生产者和消费者线程
threading.Thread(target=producer).start()
for t in threads:
t.start()
# 等待所有线程执行完毕
threading.Thread(target=producer).join()
for t in threads:
t.join()
```
在程序中,我们首先定义了一个最大长度为20的队列,然后定义了一个生产者函数和两个消费者函数。在生产者函数中,我们使用了队列的put方法向队列中添加数据,如果队列已满,则停止生产。在消费者函数中,我们使用了队列的get方法从队列中取出数据,如果队列已空,则停止消费。最后,我们创建了两个消费者线程,启动了生产者和消费者线程,等待所有线程执行完毕。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)