线程中put(None)和主函数中put(None)的区别和用法
'''
初试生产者消费者模型代码
分析:
对象含有生产者、队列、消费者
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)的区别和用法的更多相关文章
- Python中random模块在主函数中设置随机种子是否对于调用的函数中的随机值产生影响?
一个问题,加入我有一个工程文件,在main函数里面调用random模块,设置随机种子,主函数中的随机种子的设置是否会影响主函数所调用的函数中的随机值? 实际上这个问题非常重要,比如你在跑网络的时候,初 ...
- js闭包中的this(匿名函数中的this指向的是windows)
js闭包中的this(匿名函数中的this指向的是windows) 一.总结 1.普通函数中的this指向的是对象,匿名函数中的this指向的是windows,和全局变量一样 2.让匿名函数中的thi ...
- 从Win32程序中的主函数中获取命令行参数
在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...
- java的主函数中各个词的作用
主函数 public static void main(String[] args){} public: main主方法是由jvm(虚拟机)来调用,jvm实际也是一程序,为了保证jvm能在任何情况下调 ...
- HDU 2087 剪花布条(模式串在主串中出现的次数主串中子串不可重叠)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题意:求模式串在主串中出现的次数,与模式串匹配的子串之间不可重叠. 思路:用kmp算法解决,在匹 ...
- js中的this和箭头函数中的this
一.ES6 允许使用"箭头"(=>)定义函数. // var f = v => v;// 上面的箭头函数等同于: // var f = function(v) {// ...
- 箭头函数中的this和普通函数中的this对比
ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性.下面来总结一下他们之间的区别: 普通函数下的this: 在普通函数中的this总是代表它的直接调用者,在默认情况下,this ...
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 编写一个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 ...
随机推荐
- 搭建wordPress遇到无法连接数据库的问题
在确认了数据库用户,密码,地址都没有错的情况下,仍然出现无法连接数据库的问题,以至无法安装wordpress 我的wordpress:4.8.1-zh_CN 解决办法: 1.更改php的版本(我的改为 ...
- ubuntu 16.04上源码编译opengv | compile opengv on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/1e5d14ee/,欢迎阅读! compile opengv on ubuntu 16.04 Series compile open ...
- vscode在终端运行脚本时出现“因为在此系统上禁止运行脚本”
首先关闭vscode,再以管理员的身份运行vscode,然后打开终端执行: get-ExecutionPolicy,显示的是Restricted,表示状态是禁止的; 再执行:set-Execution ...
- UML元素绘制方式
UML是由视图(View).图(Diagrams).模型元素(Model elements)是和通用机制等几个部分构成. 视图:视图是对系统的抽象表示,UML共有9种不同的图类型. 模型元素:代表面向 ...
- <<代码大全>>阅读笔记之一 使用变量的一般事项
一.使用变量的一般事项 1.把变量引用局部化 变量应用局部化就是把变量的引用点尽可能集中在一起,这样做的目的是增加代码的可读性 衡量不同引用点靠近程度的一种方法是计算该变量的跨度(span) 示例 a ...
- 题解——面积(area.cpp)
题目来源&题面简述: 思路与算法选择: 只有*里面的部分对我们有用,所以可以将 *号外的部分标记一下. 可以用著名的BFS大法实现此过程.(连通块) 连通块模板: #include<bi ...
- 迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用
假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本.同时在1903以后的版本上,额外多出一个Ink的功能.那么我们就可以通过ApiInformation.IsApiContra ...
- Log4net 使用汇总(网络收集整理)
原帖1:http://blog.csdn.net/wanzhuan2010/article/details/7587780 原帖2:http://grim1980.blog.sohu.com/2555 ...
- zabbix企业微信报警实现
企业微信配置 # 注册 企业微信注册地址:https://work.weixin.qq.com 笔者注册的企业微信名称为 5iik # 配置 # 在主干5iik(企业名称)下添加子部门(监控组),并将 ...
- Java 虚拟机结构
一 数据类型 与 Java 程序语言中的数据类型相似,Java 虚拟机可以操作的数据类型可分为两类:原始类型(Primitive Types,也经常翻译为原生类型或者基本类型)和引用类型(Refere ...