'''
初试生产者消费者模型代码
分析:
对象含有生产者、队列、消费者
Queue队列模块,不适合传大文件,通常传一些消息。 '''
'''多生产者进程和多消费者进程'''
#导入模块
from multiprocessing import Process,Queue
import time
#生产者
def producers(q,name,food):
# 开始生产10个包子
for i in range(3):
print(f'{name}生产了{food}三丰牌{i}') res=f'{food}{i}' #包子0-9当时卡了没有默写出来
#把生产者生产的一大堆包子打包成一个变量,然后直接put到队列的管子里(q.put(res)),等待消费者去get #创建队列
q.put(res)
#队列结束标识
# q.put(None) #消费者
def consumers(q,name):
while True:
# 把包子接收过来,创建接收队列
recive = q.get()
# 然后接收队列进行判断,如果recive是'我生产完毕了'的话,消费者就停止再继续吃包子了
if recive is None:
break
# time.sleep(3)
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() #用join方法保证生产者生产完毕
q.put(None)
q.put(None) #几个消费者进程put几次 '''
问题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 '''

线程中put(None)和主函数中put(None)的区别和用法的更多相关文章

  1. Python中random模块在主函数中设置随机种子是否对于调用的函数中的随机值产生影响?

    一个问题,加入我有一个工程文件,在main函数里面调用random模块,设置随机种子,主函数中的随机种子的设置是否会影响主函数所调用的函数中的随机值? 实际上这个问题非常重要,比如你在跑网络的时候,初 ...

  2. js闭包中的this(匿名函数中的this指向的是windows)

    js闭包中的this(匿名函数中的this指向的是windows) 一.总结 1.普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2.让匿名函数中的thi ...

  3. 从Win32程序中的主函数中获取命令行参数

    在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...

  4. java的主函数中各个词的作用

    主函数 public static void main(String[] args){} public: main主方法是由jvm(虚拟机)来调用,jvm实际也是一程序,为了保证jvm能在任何情况下调 ...

  5. HDU 2087 剪花布条(模式串在主串中出现的次数主串中子串不可重叠)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题意:求模式串在主串中出现的次数,与模式串匹配的子串之间不可重叠. 思路:用kmp算法解决,在匹 ...

  6. js中的this和箭头函数中的this

    一.ES6 允许使用"箭头"(=>)定义函数. // var f = v => v;// 上面的箭头函数等同于: // var f = function(v) {// ...

  7. 箭头函数中的this和普通函数中的this对比

    ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性.下面来总结一下他们之间的区别: 普通函数下的this: 在普通函数中的this总是代表它的直接调用者,在默认情况下,this ...

  8. 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 编写一个void sort(int*x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件

    #include<stdio.h> void sort(int*x,int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1 ...

随机推荐

  1. React传值,验证值的类型和默认值

    const ele = <Ff const={'哈哈'} index={55}></Ff> let box = document.querySelector('#app') / ...

  2. 指定vue的v-model的类型

    作为一个菜鸟,兼只会依葫芦画瓢的搬砖it狗,并没有系统学习过vue. 在最近项目中,发现了一个奇怪的问题: 使用vant-ui 的field <van-field v-model="f ...

  3. 玩转网络(一)用TTL(Time To Live)排查网络问题

    先大概介绍一下TTL(Time To Live)吧! TTL翻译过来就是网络生存时间,说的是一个网络数据包,它在网络设备中转发的跳数(网络设备这里一般指的是路由器),默认值为64,也有很多设置为了12 ...

  4. ArcGIS Desktop10.4安装教程

    准备内容 安装环境:win10*64位专业版 安装文件:ArcGIS_Desktop_1041_150996.iso 破解文件:10.4.1crackOnly 请都以管理员身份运行安装程序 安装步骤 ...

  5. 扛把子组20191031-2 Beta阶段贡献分配规则

    此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9910 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 B ...

  6. socket解决编码解码问题

    MySocket类: import socket class MySocket(socket.socket): # 继承自socket文件中的socket类,此时socket就是父类 def __in ...

  7. Linux -- 信号发送实现

    信号是Linux系统响应某些条件而产生的一个事件,接收该信号的进程会响应地采取一些行动   signal 定义 在进程控制块 (PCB Process Control Block) 的数据结构中,存在 ...

  8. 小白学 Python 爬虫(9):爬虫基础

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. 【Java基础】字面量相加的类型转换

    Java字面量的相加类型转换 1.Java 编译期间(javac),凡是字面量和常量的运算,都会先运算出结果 2.运行期当字符串池中有 String"字面量"时,Java 会直接用 ...

  10. easyui textbox 赋值

    $('#fireInfo').textbox('setValue', tempData.fireInfo); $('#fireStartTime').datetimebox('setValue', t ...