#队列Queue:进程之间数据是隔离的,不共享的,但是通过multiprocessing的Queue可以实现进程之间的通信。
#1、先进先出:把1 2 3放到队列里,按1 2 3的顺序拿出来。
from multiprocessing import Queue
q = Queue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())
#
#
# #2、当队列没有值时,继续使用print(q.get())会导致进程阻塞:执行代码之后不会出现Process finished with exit code 0
from multiprocessing import Queue
q = Queue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())
print(q.get()) #阻塞。 #3、另外一种阻塞的情况是,实例化对象的长度不等于放进的长度:
from multiprocessing import Queue
q = Queue(3) #对象长度是3,也就是最多有3个元素。当放入多于3个元素,就会阻塞。
q.put(1)
q.put(2)
q.put(3)
q.put(4) #放入第4个元素,阻塞,下面的代码无法运行。
print(q.get()) #4、实现主进程跟子进程之间的通信:主进程可以拿到子进程放入的hello:
from multiprocessing import Queue
from multiprocessing import Process
def q_put(q):
q.put('hello') if __name__ == '__main__':
q = Queue()
p = Process(target=q_put,args=(q,))
p.start()
print(q.get()) #主进程可以拿到子进程放入的hello
#hello #5、子进程跟子进程之间的通信:
from multiprocessing import Process
from multiprocessing import Queue
def q_put(q):
q.put('hello') def q_get(q): #拿到另外一个子进程放入的hello,实现子进程跟子进程之间的通信。
print(q.get()) if __name__ == '__main__':
q = Queue()
p = Process(target=q_put,args=(q,))
p.start()
p1 = Process(target=q_get,args=(q,))
p1.start()
# hello #6、生产者和消费者模型:以做包子为例:
from multiprocessing import Queue
from multiprocessing import Process
import time
def producer(q): #生产者,做包子
for i in range(100): #因为托盘只能放10个包子,消费者吃一个之后,生产者才生产一个。
q.put(i) #多于10的情况下,其他包子都在等待着生产。 def consumer(q):
for i in range(100):
time.sleep(1) #每个消费者一秒吃一个
print(q.get()) if __name__ == '__main__':
q = Queue(10) #托盘只能放10个包子。这样可以让内存存放比较少的数据。
p = Process(target=producer,args=(q,))
p.start()
for i in range(5): #总共5个消费者
p1 = Process(target=consumer,args=(q,))
p1.start() #7、队列是双向通信的(比较少使用):producer put的同时也可以get到consunmer put的数据。consumer get的同时也可以put数据到队列里
#被producer get到。

day39-进程-队列的更多相关文章

  1. python 全栈开发,Day39(进程同步控制(锁,信号量,事件),进程间通信(队列,生产者消费者模型))

    昨日内容回顾 python中启动子进程并发编程并发 :多段程序看起来是同时运行的ftp 网盘不支持并发socketserver 多进程 并发异步 两个进程 分别做不同的事情 创建新进程join :阻塞 ...

  2. Day9 进程同步锁 进程队列 进程池 生产消费模型 进程池 paramike模块

    进程同步锁: 当运行程序的时候,有可能你的程序同时开多个进程,开进程的时候会将多个执行结果打印出来,这样的话打印的信息都是错乱的,怎么保证打印信息是有序的呢? 其实也就是相当于让进程独享资源. fro ...

  3. 并发 --- 2 进程的方法,进程锁 守护进程 数据共享 进程队列, joinablequeue模型

    一.进程的其他方法 1.   .name      进程名   (可指定) 2.  .pid     进程号 3.   os.getpid         在什么位置就是什么的进程号 4.   .is ...

  4. day 31 进程的其他方法 进程锁 进程队列

    一.进程的其他方法 1.   .name      进程名   (可指定) 2.  .pid     进程号 3.   os.getpid         在什么位置就是什么的进程号 4.   .is ...

  5. JoinableQueue---创建可连接的共享进程队列

    创建可连接的共享进程队列.这就像是一个Queue对象,但队列允许项目的使用者通知生产者项目已经被成功处理. 通知进程是使用共享的信号和条件变量来实现的. from multiprocessing im ...

  6. multiprocess模块---进程---进程队列

    首先明白几个概念: 同步:做完一件事情,再做另外一件事情 异步:做一件事情的时候,可以再做另外一件事情 阻塞:recv  sleep accept input recvfrom 非阻塞:没有遇见上面这 ...

  7. 5 并发编程-(进程)-队列&生产者消费者模型

    1.队列的介绍 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的 创建队列的类(底层就是以管道和锁定的方式实现 ...

  8. 并发编程6 锁&进程&队列

    1.进程的其他方法 2.验证进程空间隔离和守护进程 3.孤儿进程和僵尸进程 4.锁 for循环加join数据共享 5.进程队列的简单应用 6.通过队列实现进程间的通信 7.生产者消费者模型及Queue ...

  9. pgrep---以名称为依据从运行进程队列中查找进程

    pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id.每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行.对于每个属性选项,用户可以 ...

  10. Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信

    Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...

随机推荐

  1. GPU 、APU、CUDA、TPU、FPGA介绍

    购买显卡主要关注:显存.带宽和浮点运算数量   GPU :图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心.视觉处理器.显示芯片,是一种专门在个人电脑. ...

  2. ZOJ- 2562 反素数使用

    借用了下东北师大ACM的反素数模版. 本来我是在刷线段树的,有一题碰到了反素数,所以学了一下..有反素数的存在,使得一个x ,使得x的约数个数,在1 到 x的所有数里面,是最大的. 这里面还涉及安叔那 ...

  3. UML-GoF设计模式

    我认为,本章是重点中的重点.并非23个模式都被广泛应用,其中常用和最为有效的大概有15个模式. 1.适配器(Adapter) 1).使用场景 使用一个已经存在的类,但如果他的接口,也就是他的方法和你的 ...

  4. Linux--CentOS7启用网卡

    参考 http://www.centoscn.com/CentosBug/softbug/2015/0823/6039.html Centos7默认是不启用有线网卡的,需要手动开启. 改完保存退出

  5. JavaScript—瀑布流

    现在网页中需要翻页的列表,好多都已经改为瀑布流了.所以这个思路还是特别重要的 HTML Css 页面 因为每个图片的高度不一样所以她的 top 和left 我们待会通过JS计算 动态生成 js部分 思 ...

  6. 关于自动化打包部署Jenkins的使用和配置

    (未写完整,待续...) 名词解释: 1.Jenkins中对svn进行操作,可通过插件和脚本两种方式进行. 插件方式 在插件管理中安装"Subversion Plug-in",即可 ...

  7. 如何快速完成一份学术型PPT

    大多人都知道有模板这么个东西. 但是拿到手却不会运用,所以只得急的找人帮忙. 毕竟一套模板的素材图表和你要展示的内容,很多都太不一样. 这种情况,怎么办?下面就来告诉你.   选中一套模版后,放大看看 ...

  8. Python笔记_第四篇_高阶编程_进程、线程、协程_1.进程

    1. 多任务原理: 现代操作系统,像win,max os x,linux,unix等都支持多任务. * 什么叫做多任务? 操作系统可以同时运行多个任务. * 单核CPU实现多任务原理? 操作系统轮流让 ...

  9. 深入分析Java反射(二)-数组和枚举

    前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行 ...

  10. share团队冲刺9

    团队冲刺第九天 昨天:完善代码 今天:修改代码中的问题,提高兼容性 问题:无