day39-进程-队列
#队列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-进程-队列的更多相关文章
- python 全栈开发,Day39(进程同步控制(锁,信号量,事件),进程间通信(队列,生产者消费者模型))
昨日内容回顾 python中启动子进程并发编程并发 :多段程序看起来是同时运行的ftp 网盘不支持并发socketserver 多进程 并发异步 两个进程 分别做不同的事情 创建新进程join :阻塞 ...
- Day9 进程同步锁 进程队列 进程池 生产消费模型 进程池 paramike模块
进程同步锁: 当运行程序的时候,有可能你的程序同时开多个进程,开进程的时候会将多个执行结果打印出来,这样的话打印的信息都是错乱的,怎么保证打印信息是有序的呢? 其实也就是相当于让进程独享资源. fro ...
- 并发 --- 2 进程的方法,进程锁 守护进程 数据共享 进程队列, joinablequeue模型
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...
- day 31 进程的其他方法 进程锁 进程队列
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...
- JoinableQueue---创建可连接的共享进程队列
创建可连接的共享进程队列.这就像是一个Queue对象,但队列允许项目的使用者通知生产者项目已经被成功处理. 通知进程是使用共享的信号和条件变量来实现的. from multiprocessing im ...
- multiprocess模块---进程---进程队列
首先明白几个概念: 同步:做完一件事情,再做另外一件事情 异步:做一件事情的时候,可以再做另外一件事情 阻塞:recv sleep accept input recvfrom 非阻塞:没有遇见上面这 ...
- 5 并发编程-(进程)-队列&生产者消费者模型
1.队列的介绍 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的 创建队列的类(底层就是以管道和锁定的方式实现 ...
- 并发编程6 锁&进程&队列
1.进程的其他方法 2.验证进程空间隔离和守护进程 3.孤儿进程和僵尸进程 4.锁 for循环加join数据共享 5.进程队列的简单应用 6.通过队列实现进程间的通信 7.生产者消费者模型及Queue ...
- pgrep---以名称为依据从运行进程队列中查找进程
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id.每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行.对于每个属性选项,用户可以 ...
- Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信
Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...
随机推荐
- jQuery选择器全解析
1. 基本选择器 1.1 id选择器:$(#id) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- FFmpeg命令大全(更新中)
1.视频抽取音频: ffmpeg -i 3.mp4 -vn -y -acodec copy 3.aacffmpeg -i 3.mp4 -vn -y -acodec copy 3.m4a
- Java 过滤器Filter,Java Filter 不拦截某些请求 Java 过滤器支持Ajax请求
================================ ©Copyright 蕃薯耀 2020-01-10 https://www.cnblogs.com/fanshuyao/ 一.Java ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习: 变量提升
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- windows和ubuntu双系统设置开机默认系统
1.记住grub界面中windows的位置 我的界面如下:windows在第3行 2.选择进入ubuntu系统 3.打开终端,输入如下命令 sudo vim /etc/default/grub 4.看 ...
- [极客大挑战 2019]EasySQL
万能密码直接登陆得到flag admin' or 1=1 #
- 奔跑的绵羊js
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- javaweb03 javaservlet基础一
1.使用JavaEE版的eclipse开发动态的WEB工程(JavaWEB 项目)1).把开发选项切换到JavaEE2).可以在window -> Show View 中找到Package Ex ...
- Vue 集成环信 全局封装环信WebSDK 可直接使用
2019-11-25更新 npm install --save easemob-websdk请直接使用官方安装方式即可.import WebIM from 'easemob-websdk' 以下是最开 ...
- 编写shell脚本,使用 nohup 让springboot 项目在后台持续运行
1.将springboot项目打成jar放在linux的某个目录下. 2.新建一个nohup.log文件. 3.使用vi命令新建一个start.sh文件并写下以下内容: #!/bin/sh nohup ...