#队列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. 2020/2/13 bluecmsv1.6sp1代码审计

    0x00 前言 从今天开始审计一些小的cms,一周内至少审计一种,中间可能会写点别的有趣的东西 0x01 安装好后,看到登陆框,用万能密码打一发,无果,尝试重装,可以重装.有robots.txt 看u ...

  2. HashMap源码阅读笔记

    HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如 ...

  3. linux 下shell 编写脚本

    linux 下shell 编写脚本: 1.程序结构练习:编写一个脚本,给定一个正整数,计算出这个数所有位的数字之和. 例如:程序给定输入123,那么应该返回1+2+3=6. 2.程序结构练习:编写一个 ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL 索引

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...

  5. 201771010123汪慧和《面向对象程序设计Java》第十一周实验总结

    一.理论部分 1.栈 (1)栈是一种特殊的线性表,是一种后进先出的结构.(2)栈是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶,表头称为栈底.(3)栈的物理存储可以用顺序存储结构,也可以用链式 ...

  6. 实现3d效果

    transform-origin: center left 60px;可以实现3d转换

  7. Thread--线程工作万花筒

    线程工作内存图. 线程状态.

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

    1.协程的概念: 子程序或者子函数,在所有语言中都是层级调用,比如A调用B,再B执行的过程中又可以调用C,C执行完毕返回,B执行返回,最后是A执行完毕返回.是通过栈来实现的,一个线程就是执行一个自称, ...

  9. ModernCNN

    # 深度卷积神经网络(AlexNet) LeNet: 在大的真实数据集上的表现并不尽如⼈意. 1.神经网络计算复杂. 2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域. 机器学习的特征提取:手 ...

  10. Java Keyword Synchronized 学习记录

    Synchronized Java编程思想:每个对象都包含了一把锁(也叫作"监视器"),它自动成为对象的一部分,调用任何synchronized方法时,对象就会被锁定,不可再调用那 ...