
'''
初试生产者消费者模型代码
分析:
对象含有生产者、队列、消费者
Queue队列模块,不适合传大文件,通常传一些消息。
'''
'''多生产者进程和多消费者进程'''
from multiprocessing import Process,Queue
import time
def producers(q,name,food):
for i in range(3):
print(f'{name}生产了{food}三丰牌{i}')
res=f'{food}{i}'
q.put(res)
def consumers(q,name):
while True:
recive = q.get()
if recive is None:
break
print(f'{name}吃掉了{recive}')
if __name__ == '__main__':
q=Queue()
p1 = Process(target=producers, args=(q, '张三丰', '狗不理包子'))
p2 = Process(target=producers, args=(q, '郭靖', '降龙十八掌包子'))
p3 = Process(target=producers, args=(q, '黄蓉', '打狗棒包子'))
c1 = Process(target=consumers, args=(q, 'luzhaoshan'))
c2 = Process(target=consumers, args=(q, 'xiaobai'))
p1.start()
p2.start()
p3.start()
c1.start()
c2.start()
p1.join()
p2.join()
p3.join()
q.put(None)
q.put(None)
'''
问题01:
为什么会产生生产9个包子,吃掉了6个包子的问题?
解答:
put一次None,结束一个进程,总共put了3次None,
但是只接收了两个None,所以就会导致生产9个包子,
只吃掉了6个包子。
问题02:
为什么是两次None?
q.put(None)
q.put(None)
问题03:
问什么q.put(None)要写在这个地方?
问题04:
不注释第27行代码,执行结果为什么会吃掉6个包子呢?
运行结果如下:
张三丰生产了狗不理包子三丰牌0
张三丰生产了狗不理包子三丰牌1
张三丰生产了狗不理包子三丰牌2
郭靖生产了降龙十八掌包子三丰牌0
郭靖生产了降龙十八掌包子三丰牌1
郭靖生产了降龙十八掌包子三丰牌2
黄蓉生产了打狗棒包子三丰牌0
黄蓉生产了打狗棒包子三丰牌1
黄蓉生产了打狗棒包子三丰牌2
luzhaoshan吃掉了狗不理包子0
luzhaoshan吃掉了狗不理包子1
luzhaoshan吃掉了狗不理包子2
xiaobai吃掉了降龙十八掌包子0
xiaobai吃掉了降龙十八掌包子1
xiaobai吃掉了降龙十八掌包子2
'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!