如果是两个生产者,一个消费者,上述代码要如何修改
时间: 2024-05-06 14:16:00 浏览: 16
如果有两个生产者和一个消费者,可以将生产者和消费者的线程数量都设置为1,然后再增加一个共享的队列来存储生产者生产的数据。修改后的代码如下:
```python
import threading
import time
import queue
# 创建一个共享的队列
q = queue.Queue()
# 生产者函数
def producer():
while True:
item = time.time()
q.put(item)
print("Producer produced", item)
time.sleep(1)
# 消费者函数
def consumer():
while True:
item = q.get()
q.task_done()
print("Consumer consumed", item)
time.sleep(2)
# 创建生产者线程1
t1 = threading.Thread(target=producer)
t1.daemon = True
t1.start()
# 创建生产者线程2
t2 = threading.Thread(target=producer)
t2.daemon = True
t2.start()
# 创建消费者线程
t3 = threading.Thread(target=consumer)
t3.daemon = True
t3.start()
# 主线程等待所有任务完成
q.join()
```
在这个修改后的代码中,我们使用了一个 `queue.Queue` 对象来存储生产者生产的数据。生产者线程1和线程2都会向这个队列中不断添加数据。消费者线程从队列中获取数据并进行消费。由于队列是线程安全的,多个生产者线程可以同时向队列中添加数据,而消费者线程也可以安全地从队列中获取数据。最后,我们调用 `q.join()` 等待队列中的所有任务都被处理完毕。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)