Python 多进程编程之 进程间的通信(Queue)

1,进程间通信
Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法
----这是操作系统开辟的一个空间,可以让各个子进程把信息放到Queue中,也可以把自己需要的信息取走
----这就相当于系统给python开辟了一个聊天室,让python创建的子进程可以在这个聊天室里畅所欲言
----一个进程可以放多条消息到Queue中

2,实例

#导入Queue,Process
from multiprocessing import Queue,Process
import os #写入进程
def wp(q):
print("%s开始写入:"%os.getpid)
for i in "WANG":
#将信息写入队列
q.put(i)
print(i) #读取进程
def rd(q):
print("%s开始读取"%os.getpid())
while True:
if not q.empty():
#从队列读取信息
print("read to %s"%q.get()) if __name__=="__main__":
#创建队列
q = Queue() #创建写入进程
w = Process(target=wp,args=(q,))
#启动写入进程
w.start() #创建读取进程
r = Process(target=rd,args=(q,))
#启动读取进程
r.start()

3,执行结果

1265开始读取
<built-in function getpid>开始写入:
W
A
N
G
read to W
read to A
read to N
read to G

4,进程间通信常用函数

q.Queue()
--------------------------------------------------------
def __init__(self, maxsize=-1):
self._maxsize = maxsize
---- maxsize=-1,表示队列个数无穷大
---- 初始化Queue对象时,(例,q=Queue() )
或括号中没有指定最大可接收的消息数量,或数量为负值,
那么就表示可接收的消息数量没有上限
q.put("信息")
---------------------------------
将信息放入队列中
def put(self, obj, block=True, timeout=None):
pass
obj----传入的信息
block=True----阻塞=真 : 真阻塞(默认值)
timeout=None----等待时间,None(默认值)表示无限等待, 如果timeou设置值,则会等待N秒后,强制放入(put)
q.get()
----------------------------------
def get(self, block=True, timeout=None):
pass
从队列中拿出一个进程消息
block=True 默认值是真阻塞,
timeout=None 意思是  无限,无穷
两个合在一起的意思是  无限阻塞,无穷等待
队列的特点是:先进先出 所以get拿的顺序也是,先进先出 first in first out
q.put_nowait()
-------------------------------------
def put_nowait(self, obj):
pass 相当于q.put(obj,False)
不等待,直接放入
q.get_nowait()
----------------------------------------
def get_nowait(self):
pass 不做等待,就是要获取
如果队列中没有消息,就会报错
----解决报错,加入try 异常处理
q.qsize()
------------------------------------
def qsize(self):
return 0 返回当前队列包含的消息数量
q.full()
------------------------------
检测队列是否已经满了
True: 满
False: 未满
q.empty()
---------------------------------
def empty(self):
return False 检测队列是否为空
True:空
False:未空

Python 多进程编程之 进程间的通信(Queue)的更多相关文章

  1. Python 多进程编程之 进程间的通信(在Pool中Queue)

    Python 多进程编程之 进程间的通信(在Pool中Queue) 1,在进程池中进程间的通信,原理与普通进程之间一样,只是引用的方法不同,python对进程池通信有专用的方法 在Manager()中 ...

  2. c++ 网络编程(三) LINUX/windows 进程间的通信原理与实现代码 基于多进程的服务端实现

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613027.html 锲子:进程与线程是什么,他们的区别在哪里: 1 进程概念 进程是程序的一 ...

  3. Python网络编程(进程池、进程间的通信)

    线程池的原理:        线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,        创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,        即均为启动,不消 ...

  4. Python多进程编程-进程间协作(Queue、Lock、Semaphore、Event、Pipe)

    进程与进程之间是相互独立的,互不干扰.如果多进程之间需要对同一资源操作,就需要进程间共享变量,上一篇文章介绍了进程间共享数据的三大类Value.Array.Manager,这三种类的主要区别在于管理的 ...

  5. python全栈开发day32-进程创建,进程同步,进程间的通信,进程池

    一.内容总结 1.进程创建 1) Process:两种创建一个新进程的方法: 1.实例化Process,通过args=(,)元组形式传参,2创建类继承Process,类初始化的时候传参数 2) p.j ...

  6. 探讨一个新的两个进程间的通信和编程模型 (Windows)

    本文探讨一个新的Windows上的两个UI进程间的通信和编程模型. 开门见山,下面是这个通信模型的梗概图: 这个模型的设计目标描述如下: (1)发送数据接口:RpcSend, RpcPost RpcS ...

  7. Python 进程间的通信

    #-*-coding:utf-8-*- '''python提供了多种进程间的通信方式,如:Queue,Pipe,Valie+Array等. Queue与Pipe的区别在于Pipe常用来在两个进程间通信 ...

  8. 多任务-python实现-使用队列完成进程间的通信(2.1.8)

    @ 目录 1.为什么要使用队列 2.python代码实现 1.为什么要使用队列 进程之间是互相独立的,而线程能够共享全局变量 所以如果进程间想要交换数据的话 只有通过进程间的通信,比如socket.太 ...

  9. Python 35 进程间的通信(IPC机制)、生产者消费者模型

    一:进程间的通信(IPC):先进先出  管道:队列=管道+锁 from multiprocessing import Queue q=Queue(4) q.put(['first',],block=T ...

随机推荐

  1. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(一)

    准备服务器: docker network create --subnet=192.168.0.0/16 staticnetdocker run -d --privileged -v `pwd`/my ...

  2. activate-power-mode效果实验(未完全成功)

    原产地: Atom 支持版本一览 https://github.com/codeinthedark/awesome-power-mode 1.安装Atom:[ AtomSetup-x64.exe] 百 ...

  3. 【笔记】range函数在py3里面的处理及numpy库效率比较【原创】

    今天看了一下,numpy数组操作其中一段代码,主要是测试用纯python和numpy之间的性能问题 在py2环境下,代码如下: def pysum(n): a = range(n) b = range ...

  4. 序列化与反序列化之Kryo

    序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 需要序列化的情况: 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候: 当你想 ...

  5. 一个linux bbr存在的调用顺序bug

    最近跟踪bbr的状态转换的代码,发现一个问题: [,min_rtt_us=,full_bw=,cycle_idx=,pacing_gain=,cwnd_gain=,rtt_cnt= [,min_rtt ...

  6. (转)Word插入图片显示不全怎么办

    https://jingyan.baidu.com/article/e73e26c0c0081c24adb6a73d.html 现在告诉大家解决办法. 方法一: A.单击选中图片,然后在“开始”选项卡 ...

  7. 源码解析之AQS源码解析

    要理解Lock首先要理解AQS,而要理解并发类最好的方法是先理解其并发控制量不同值的含义以及该类运作流程,然后配合一步步看源码.该类有一个重要的控制量是WaitStates,节点的状态值. /** w ...

  8. jQuery——检测滚动条是否到达底部

    一.jQuery检测浏览器window滚动条到达底部 jQuery获取位置和尺寸相关函数:$(document).height()    获取整个页面的高度:$(window).height()    ...

  9. NodeJs第3方包说明

    formidable 作用:实现简单文件上传 var formidable = require('formidable'); var form = new formidable.IncomingFor ...

  10. idea2017启动ssm项目卡在build阶段后报outofmemory

    如上图,设置build process heap size(Mbytes)(构建过程堆大小(单位MB))为4000,即约4GB.之前设置的是700,修改之后问题解决. 补充:导入新项目后,此参数会初始 ...