(8)进程---Queue队列
# IPC Inter-Process Communication
# 实现进程之间通信的两种机制:
# 管道 Pipe 用的很少
# 队列 Queue
队列的特征:现进先出,栈属于后进后出
基本语法:from multiprocessing import Queue
q = Queue(3) 传参数表示只允许放入3个数,不是长度,是个数
q.get() 取不到的时候会有阻塞,不会报异常,程序挂起
q.put() 存入超出范围也不会报异常
q.getnowait() 拿不到报异常
q.put_nowait() 非阻塞版本的put ,放入超出范围也会报异常
q.empty() 检测是否为空 (了解) 在一边存一边取得时候判断不准确
q.full() 检测是否已经存满 (了解) 在一边存一边取得时候判断不准确
生产者和消费者模型:
生产者和消费者模型从程序上来讲就是数据的存入和获取的过程
最为理想的生产者和消费者模型 , 两者之间的运行速度应该是同步的
- from multiprocessing import Process,Queue
- import time
- import random
- # 消费者方法 [负责取值]
- def consumer(q,name):
- while True:
- food = q.get()
- if food is None:
- break
- time.sleep(random.uniform(0.5,1))
- print("%s吃了一个%s" % (name,food))
- # 生产者方法 [负责存值]
- def producer(q,name,food):
- for i in range(5):
- time.sleep(random.uniform(0.3,0.8))
- print("%s生产了%s" % (name,food))
- q.put(food+str(i))
- if __name__ == "__main__":
- q = Queue()
- c1 = Process(target=consumer,args=(q,"陈露中"))
- c2 = Process(target=consumer,args=(q,"陈根基"))
- # c1.daemon = True
- c1.start()
- c2.start()
- p1 = Process(target=producer,args=(q,"订海呀","地瓜"))
- p2 = Process(target=producer,args=(q,"陈红平","黄瓜"))
- p1.start()
- p2.start()
- p1.join()
- p2.join()
- q.put(None) # 添加None,让程序自动结束
- q.put(None)
执行结果:
- 订海呀生产了地瓜
- 陈红平生产了黄瓜
- 订海呀生产了地瓜
- 陈红平生产了黄瓜
- 陈根基吃了一个黄瓜0
- 订海呀生产了地瓜
- 陈露中吃了一个地瓜0
- 陈红平生产了黄瓜
- 订海呀生产了地瓜
- 陈根基吃了一个地瓜1
- 陈露中吃了一个黄瓜1
- 陈红平生产了黄瓜
- 陈红平生产了黄瓜
- 陈根基吃了一个地瓜2
- 订海呀生产了地瓜
- 陈露中吃了一个黄瓜2
- 陈根基吃了一个地瓜3
- 陈露中吃了一个黄瓜3
- 陈根基吃了一个黄瓜4
- 陈露中吃了一个地瓜4
(8)进程---Queue队列的更多相关文章
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- Python自动化运维之16、线程、进程、协程、queue队列
一.线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行 ...
- 进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型
一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: import param ...
- 守护进程,互斥锁, IPC ,Queue队列,生产消费着模型
1.守护进程 什么是守护进程? 进程是一个正在运行的程序 守护进程也是一个普通进程,意思是一个进程可以守护另一个进程,比如如果b是a的守护进程,a是被守护的进程,如果a进程结束,b进程也会随之结束. ...
- 多进程 multiprocessing 模块进程并发Process;Pool ;Queue队列 、threading模块;
multiprocessing 模块中的 Process类提供了跨平台的多进程功能,在windows和linux系统都可以使用. 1.首先要实例化一个类,传入要执行的函数. 实例名 = Process ...
- Python Queue队列
queue is especially useful in threaded programming when information must be exchanged safely between ...
- python中的Queue(队列)详解
一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO: Queue.Que ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)
参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...
随机推荐
- linux 中部署 rsync 实现文件远程备份及 同步
客户端:数据源:服务端:数据接收方 rsync官方文档:https://www.samba.org/ftp/rsync/rsync.html 手动测试用“通过远程外壳访问"里的语法: 参考1 ...
- body-parser 用法
1.下载 body-parser 模块 : npm install body-parser 2.require body-parser 模块(引入),并用一个变量接收(此处栗子变量为 bodyp ...
- C++进程间通信之剪贴板
转载:http://blog.csdn.net/hk627989388/article/details/53693636 转载:http://blog.csdn.net/heihei36/articl ...
- 【python40--类和对象:一些相关的BIF】
0.如何判断一个类是否为另外一个类的子类 --使用issubclass(class,classinfo)函数,如果第一个函数(class)是第二个参数(classinfo)的一个子类,则返回Ture, ...
- Python3基础 e记法示例
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- CentOS 安装 MongoDB
一.安装mongodb 本文介绍的安装方式是以二进制方式离线安装,相当于windows"绿色"安装版本的概念. 下载mongodb: # https://www.mongodb.c ...
- dp入门(LIS,LCS)
LCS
- 彻底理解mysql服务器的字符集转换问题
主要参考这三个文章: https://www.xiariboke.com/article/4147.html http://blog.sina.com.cn/s/blog_690c46500100k1 ...
- Miller_Rabin整理笔记
目录 问题 别的 正事 代码 问题 一个数到底是不是素数 别的 首先列一下我们可以求素数的东西 根号暴力求 \(O(nloglogn)\)的埃氏筛 \(O(n)\)的欧拉筛 还有我们要学习的Mille ...
- Vue学习五:v-for指令使用方法
本文为博主原创,未经允许不得转载: <!DOCTYPE html> <html lang="zh"> <head> <meta http- ...