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,这三种类的主要区别在于管理的 ...
随机推荐
- Spring服务定制
问题总述 我们都知道如果使用Spring来进行bean管理的时候.如果同一个接口的实现类存在两个,直接使用@Autowired注解来实现bean注入,会在启动的时候报异常.我们通常的做法是使用@R ...
- SignalR Self Host+MVC等多端消息推送服务(3)
一.概述 最近项目确实太忙,而且身体也有点不舒服,慢性咽炎犯了,昨晚睡觉时喘不过气来,一直没休息好,也没什么时间写博客,今天朋友问我什么时候能出web端的消息发送的文章时,我还在忙着改项目的事,趁着中 ...
- Filecoin: 影响力容错(PFT)和预期共识(EC)
名字翻译:Power Fault Tolerance-影响力容错 关于这个名字翻译,小编思考了大约2周时间,期间也跟各路技术牛人进行了交流. The Power Fault Tolerance mod ...
- 笔记:Jersey REST 传输格式-JSON
JSON 类型已经成为Ajax技术中数据传输的实际标准,Jersey 提供了多种处理JSON数据的包和解析方式,下表展示了JSON包和解析方式: 解析方式\JSON支持包 MOXy JSON-P Ja ...
- .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
一.前言 为什么要调试代码?通过调试可以让我们了解代码运行过程中的代码执行信息,比如变量的值等等.通常调试代码是为了方便我们发现代码中的bug.ken.io觉得熟练代码调试技巧是成为合格程序员的基本要 ...
- c++ --> 重载、重写(覆盖)和隐藏的区别
重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...
- Java多线程:队列与阻塞队列
1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附 ...
- C# MVC NPOI导出
前台: <form id="fmexp" method="post" target="_blank"> </form> ...
- New UWP Community Toolkit - Carousel
概述 New UWP Community Toolkit V2.2.0 的版本发布日志中提到了 Carousel 的调整,本篇我们结合代码详细讲解 Carousel 的实现. Carousel 是 ...
- alpha-咸鱼冲刺day5-紫仪
总汇链接 一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 !!!QAQ可以做到跟数据库交互了!!!!先来撒花花!(然后继续甲板) 四,问题困难 日常啥都不会,百度真心玩一年 ...