'''
初试生产者消费者模型代码
分析:
对象含有生产者、队列、消费者
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. Java虚拟机详解(九)------类文件结构

    我们知道计算机是由晶体管.电路板等组装而成的电子设备,而这些电子设备其实只能识别0与1的信号. 那么问题来了,我们在操作系统上编写的Java代码(由字母.数字等各种符号组成),打包后部署到服务器上,是 ...

  2. JAVA中快速生成get与set

    快捷键 ctrl+Alt+S generate getters and setters

  3. Redis的面试问题总结,面试跳槽必备

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  4. ip地址计算

    1.多少个子网? 2x个,其中x为被遮盖(取值为1)的位数.例如,在11000000(这个值是子网掩码的最后几位,例如,mask=18)中,取值为1的位数为2,因此子网数位22=4个: 2.每个子网包 ...

  5. ASI的其他使用方法

    ASI 除了设置代理监听以外还可以设置block进行监听 如果同时设置block和实现了代理方法 请求过程中 block和代理方法都会调用 一般 代理方法 优先block方法调用 第3种方式调用

  6. php 图片指定留白叠加缩放

    遇到这样一个需求:原图大小不一,而且留白也大小不一,需要将原图切出来一个核心图,然后将图片左右留白,组成一个其他尺寸的图片.换句话说,原图在新图片中的位置是可以控制的. 这里思路是:先创建一个规定大小 ...

  7. 2019-2020-1 20199304《Linux内核原理与分析》第七周作业

    进程的描述和进程的创建 1.进程描述 1.1操作系统的三大管理功能以及对应的抽象概念: 进程管理 内存管理 文件系统 1.2Linux进程的状态: (1)Linux中进程的状态细分可以分为七种: R运 ...

  8. 一句话总结flux,以及我们为何需要flux

    如果让你用一句话总结一下什么是flux,该怎么说? 官网上有这样的介绍:flux是一种思想,一种框架,是facebook给react... 这样的解释对程序员来说,显得过于抽象又不具体了. 阮老师的文 ...

  9. 一条数据的HBase之旅,简明HBase入门教程1:开篇

    [摘要] 这是HBase入门系列的第1篇文章,主要介绍HBase当前的项目活跃度以及搜索引擎热度信息,以及一些概况信息,内容基于HBase 2.0 beta2版本.本系列文章既适用于HBase新手,也 ...

  10. 输入URL到页面渲染

    输入网址回车或者刷新页面到页面传染出来的整个流程 DNS 解析 HTTP三次握手 -> TCP/IP连接 浏览器发送请求 服务器返回请求的文件 (html) 浏览器渲染 1. DNS 解析 查找 ...