python多进程之间的通信:消息队列Queue
python中进程的通信:消息队列。
我们知道进程是互相独立的,各自运行在自己独立的内存空间。
所以进程之间不共享任何变量。
我们要想进程之间互相通信,传送一些东西怎么办?
需要用到消息队列!!
进程之间通过Queue进行通信
这是一个消息队列,
q = Queue(n) 开一个能接收n条信息的队列,不传入默认动态延长 q.qsize() 返回队列中消息的条数
q.empty() 队列是否为空
q.get( block,timeout ) 取出消息,block默认为True,表示如果为空 一直等取出为止
timeout设置等多久,如果到时间还是空就抛出异常
q.get_nowait() 相当于q.get(False) 如果空 立刻抛出异常 q.put(item,block,timeout) item为向队列传送的内容
block默认为True 如果队列满了 就一直等有空位再送进去
timeout设置时间 到时间了没送进去就抛出异常
q.put_nowait(item) 相当于q.put(False) 如果满了 立即抛出异常
from multiprocessing import Queue
if __name__ == "__main__":
q = Queue(3)
q.put("消息1")
q.put("消息2")
print(q.full())
q.put("消息3")
print(q.full()) # 从消息队列取数据 推荐两种方法 1 捕获异常 2 判断 try :
q.put("消息4",True , 2) # 尝试写入,如果满了 2秒后抛出异常
except:
print("已经满了,现有消息%s条"%q.qsize())
try :
q.put_nowait("消息4") # 尝试写入 如果满了立即抛出异常
#相当于q.put(item,False)
except:
print("已经满了,现有消息%s条"%q.qsize()) if not q.full():
q.put_nowait("消息4") if not q.empty():
for i in range(q.qsize()):
print(q.get_nowait())
在进程池当中使用Queue 需要使用Manager().Queue()
from multiprocessing import Manager,Pool
import os
def reader(q):
print("我是子进程%s,我的父进程是%s,我开始读取消息"%( os.getpid(),os.getppid() ) )
for i in range(q.qsize()):
print(q.get()) def writer(q):
print("我是子进程%s,我的父进程是%s,我开始写消息"%( os.getpid(),os.getppid() ))
for i in "DongGe":
q.put(i) if __name__ == "__main__":
p = Pool()
q = Manager().Queue()
p.apply(writer,(q,))
p.apply(reader,(q,))
#关闭进程池 不再接收任务
p.close()
#阻塞 等待进程结束,必须在close之后
p.join() print("结束")
python多进程之间的通信:消息队列Queue的更多相关文章
- python进程之间的通信——Queue
我们知道进程之间的数据是互不影响的,但有时我们需要在进程之间通信,那怎么办呢? 认识Queue 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息 ...
- 2.Python进程间的通信之队列(Queue)和生产者消费者模型
一.队列 1.1 概念介绍-----multiprocess.Queue 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. Queue([maxsize] ...
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- [PHP] 多进程通信-消息队列使用
向消息队列发送数据和获取数据的测试 <?php $key=ftok(__FILE__,'a'); //获取消息队列 $queue=msg_get_queue($key,0666); //发送消息 ...
- python消息队列Queue
实例1:消息队列Queue,不要将文件命名为"queue.py",否则会报异常"ImportError: cannot import name 'Queue'" ...
- 消息队列Queue大全
消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...
- 消息队列queue
一.queue 在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题.recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程 ...
- python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型
线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...
- Python多进程编程-进程间协作(Queue、Lock、Semaphore、Event、Pipe)
进程与进程之间是相互独立的,互不干扰.如果多进程之间需要对同一资源操作,就需要进程间共享变量,上一篇文章介绍了进程间共享数据的三大类Value.Array.Manager,这三种类的主要区别在于管理的 ...
随机推荐
- 本地安装plsql和instantclient连接linux服务器端的oracle
当虚拟机里面的linux服务器安装好oracle之后(具体安装方法在之前的博客有说到),如何连接使用呢?连接过程中会出现什么问题呢? 1.首先我们下载instantclient的压缩包,直接解压就好, ...
- zabbix添加自定义监控项
zabbix添加自定义监控项 author:headsen chen 2017-10-16 17:23:17 个人原创,转载请注明作者,出处,否则依法追究法律责任 主机端配置: 首先安装好za ...
- Office远程代码执行漏洞(CVE-2017-11882)复现
昨晚看到的有复现的文章,一直到今天才去自己复现了一遍,还是例行记录一下. POC: https://github.com/Ridter/CVE-2017-11882/ 一.简单的生成弹计算器的doc文 ...
- Python之sqlite3
Python sqlite3数据库是一款非常小巧的内置模块,它使用一个文件存储整个数据库,操作十分方便,相比其他大型数据库来说,确实有些差距.但是在性能表现上并不逊色,麻雀虽小,五脏俱全,sqlite ...
- postman 简单教程-实现简单的接口测试
最近开始做接口测试了,因为公司电脑刚好有postman,于是就用postman来做接口测试,哈哈哈哈,...postman 功能蛮强大的,还比较好用,下面说下postman如何来测试接口 1.下载po ...
- Maven学习笔记二
依赖范围 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api&l ...
- Java基础学习笔记九 Java基础语法之this和super
构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...
- springboot集成mybatisplus
介绍: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生.(摘自mybatis-plus官网)Mybati ...
- c# 动态实例化一个泛型类
动态实例化一个类,比较常见,代码如下 namespace ConsoleApp2 { public class MyClass { } } Type classType = Type.GetType( ...
- C语言指针作业
一.PTA实验作业 题目1:6-5 判断回文字符串 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明. 第一次做的时候我j直接等于count,其 ...