python 进程Queue
1、作用:进程之间的数据交互
2、常用方法
"""
对象.put()
作用:放入队列一个数据
对象.get()
作用:取队列一个数据,若队列没有值,则阻塞
对象.empty()
作用:判断队列是否为空
对象.full()
作用:判断队列是否为满 """
3、例子
"""
子进程Process-1 和 子进程Process-2进行数据传输
"""
from multiprocessing import Queue
from multiprocessing import Process def new_put(q):
q.put('你好') def new_get(q):
ret = q.get()
print(ret) if __name__ == '__main__':
q = Queue()
p = Process(target=new_put, args=(q, ))
p.start()
print(p.name)
g = Process(target=new_get, args=(q, ))
g.start()
print(g.name)
4、生产者消费者模型
import time
import random
from multiprocessing import Process
from multiprocessing import Queue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f) def consumer(name, q):
while 1:
f1 = q.get()
if f1 is None:
break
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2)) if __name__ == '__main__':
q = Queue()
p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.start()
p.join()
p2.join()
q.put(None)
q.put(None)
优化
import time
import random
from multiprocessing import Process
from multiprocessing import JoinableQueue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f)
q.join() def consumer(name, q):
while 1:
f1 = q.get()
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2))
q.task_done() if __name__ == '__main__':
q = JoinableQueue() p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.daemon = True
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.daemon = True
c2.start()
p.join()
p2.join()
过程:主进程等待->生产者进程,生产者等待->消费者
p.join()->q.join()->c,task_down()
obj.join()
作用:阻塞,直到队列里的所有值被处理,一般在生产者进程中和put()方法一起使用
obj.task_down()
作用:向q.join()发送信号量,表名q.get()的值,已经被处理
注意:给消费者设置守护进程,队列的数据处理完毕后,消费者再执行下去,没有意义
python 进程Queue的更多相关文章
- Python开发【笔记】:what?进程queue还能生产出线程!
进程queue底层用线程传输数据 import threading import multiprocessing def main(): queue = multiprocessing.Queue() ...
- python 进程和线程
python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...
- Python 进程
安装Python的paramiko模块 步骤: 1:管理员方式打开cmd,切换到python安装路径的Scripts目录下: 2:执行命令: 1 pip3.5.exe install paramiko ...
- python进程、线程、协程(转载)
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- python——进程、线程、协程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...
- Python 进程之间共享数据
最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享 在mp库当中,跨进程对象共享有三种方式,第一种 ...
- Python 进程间数据交互
进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换 Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...
- Python中Queue模块及多线程使用
Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...
随机推荐
- UVA 11400"Lighting System Design"
传送门 错误思路 正解 AC代码 参考资料: [1]:https://www.cnblogs.com/Kiraa/p/5510757.html 题意: 现给你一套照明系统,这套照明系统共包含 n 种类 ...
- Roslyn 使用 WriteLinesToFile 解决参数过长无法传入
在写 Roslyn 的时候,经常需要辅助编译的工具,而这些工具需要传入一些参数,在项目很大的时候,会发现自己传入的参数比微软限制控制台可以传入的参数大很多,这时就无法传入了参数 本文告诉大家如何使用 ...
- tf.concat()
转载自:https://blog.csdn.net/appleml/article/details/71023039 https://www.cnblogs.com/mdumpling/p/80534 ...
- Java动态编译优化——提升编译速度(N倍)
一.前言 最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译.并且编译速度是原来的2-3倍.原本打算直接用这个 ...
- BAT 脚本判断当前系统是 x86 还是 x64 系统
本文告诉大家在写 BAT 脚本的时候,如何判断当前的系统是 32 位系统的还是 64 位系统 通过注册表进行判断方法 @echo OFF reg Query "HKLM\Hardware\D ...
- JMETER+JENKINS接口测试持续集成
FIDDER+ANT+JENKINS+JMETER+SVN+tomcat接口测试集成 操作流程: 1.测试人员通过FIDDER过滤抓取接口调用信息,导出成jmx文件.(jmeter支持命令行方式调用j ...
- 给培训学校讲解ORM框架的课件
导读:这是我给某培训学校培训.net程序员所设计的课件,他们普遍反映太难了,是这样吗?
- jquery核心基础
jquery对对象的操作: 检查对象类型: 老式的javascript使用typeOf()操作符,但他是不符合逻辑的,在某些情况下,typeOf()返回的不是一个正确的值,或者返回一个出乎意料的值 ...
- 一键自动生成 java junit 测试代码神器 gen-test-plugin 入门介绍
gen-test-plugin 我们日常编写代码的过程中,经常需要为代码编写测试案例. 随着对代码质量的要求越来越高,很多公司开始通过代码的测试覆盖率作为 QA 的一个评定指标. 本框架可以一键生成所 ...
- 第二阶段:1.流程图:11.PPT绘制页面流程图
产品经理主要绘制两个图:1.业务流程图(谁在什么条件下完成什么任务)2.页面流程图(具体到产品呈现的功能设计等等细节方面) 选择插入 选择流程图中的形状 设置两个矩形 同时添加不同的背景色 添加文本框 ...