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) 如果满了 立即抛出异常
1 from multiprocessing import Queue 2 if __name__ == "__main__": 3 q = Queue(3) 4 q.put("消息1") 5 q.put("消息2") 6 print(q.full()) 7 q.put("消息3") 8 print(q.full()) 9 10 # 从消息队列取数据 推荐两种方法 1 捕获异常 2 判断 11 12 try : 13 q.put("消息4",True , 2) # 尝试写入,如果满了 2秒后抛出异常 14 except: 15 print("已经满了,现有消息%s条"%q.qsize()) 16 try : 17 q.put_nowait("消息4") # 尝试写入 如果满了立即抛出异常 18 #相当于q.put(item,False) 19 except: 20 print("已经满了,现有消息%s条"%q.qsize()) 21 22 if not q.full(): 23 q.put_nowait("消息4") 24 25 if not q.empty(): 26 for i in range(q.qsize()): 27 print(q.get_nowait())
在进程池当中使用Queue 需要使用Manager().Queue()
1 from multiprocessing import Manager,Pool 2 import os 3 def reader(q): 4 print("我是子进程%s,我的父进程是%s,我开始读取消息"%( os.getpid(),os.getppid() ) ) 5 for i in range(q.qsize()): 6 print(q.get()) 7 8 def writer(q): 9 print("我是子进程%s,我的父进程是%s,我开始写消息"%( os.getpid(),os.getppid() )) 10 for i in "DongGe": 11 q.put(i) 12 13 14 if __name__ == "__main__": 15 p = Pool() 16 q = Manager().Queue() 17 p.apply(writer,(q,)) 18 p.apply(reader,(q,)) 19 #关闭进程池 不再接收任务 20 p.close() 21 #阻塞 等待进程结束,必须在close之后 22 p.join() 23 24 print("结束")
转载于:https://www.cnblogs.com/Lin-Yi/p/7360960.html
python多进程之间的通信:消息队列Queue相关推荐
- python笔记 7-8 进程池 进程通信 迭代器 消息队列 Queue 协程 和正则表达式
day7 进程 进程池 进程通信 迭代器 消息队列 Queue 作用 用于多个进程间的通信 操作put放入消息(值) put_nowait() 放入值,不等待 如果队满,则报错 get获取消息(值) ...
- python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...
- php 多进程 消息队列,[PHP] 多进程通信-消息队列使用
向消息队列发送数据和获取数据的测试 $key=ftok(__file__,'a'); //获取消息队列 $queue=msg_get_queue($key,0666); //发送消息 //msg_se ...
- 消息队列Queue大全
消息队列Queue大全 (http://queues.io/) 作业队列,消息队列和其他队列.几乎所有你能想到的都在这. 关于 那里有很多排队系统.他们每个人都不同,是为解决某些问题而创建的.这个页面 ...
- LiteOS内核源码分析:消息队列Queue
本文分享自华为云社区<LiteOS内核源码分析系列十 消息队列Queue>,原文作者:zhushy . 队列(Queue)是一种常用于任务间通信的数据结构.任务能够从队列里面读取消息,当队 ...
- ZUCC_操作系统原理实验_Lab9进程的通信消息队列
lab9进程的通信–消息队列 一.两个进程并发执行,通过消息队列,分别进行消息的发送和接收 1.代码: //接受消息 #include<stdio.h> #include<stdli ...
- python3多进程 queue 取值_【整理】python多进程之间共享queue | 勤奋的小青蛙
默认情况下,使用multiprocess.Queue()只是在两个进程之间进行通信,如下示例: import multiprocessing, time def task(args): count = ...
- Linux进程之间通信 消息队列
使用命令 ipcs -q 查看对应的消息队列 代码 文件接收者 #include <sys/types.h> #include <stdio.h> #include < ...
- python 归纳 (十二)_并发队列Queue的使用
# -*- coding: UTF-8 -*- """ 学习队列 Queue总结:1. 队列可以设置大小,也可以无限大小2. 空了,满了,读写时可以阻塞,也可以报错3. ...
最新文章
- 淄博职业学院计算机应用,2019年淄博职业学院单独招生云计算技术与应用专业技能测试实施细则...
- C#中生产者线程和消费者线程同步的实现
- ENAS加载自己的数据集之路
- 安装 tensorlayer
- DirectUI介绍
- 策略模式在JDK 源码中的体现
- 5.8 正则化和数据标准化
- how is SAP UI5 configuration.js loaded in the runtime
- 2021年广西艺术高考成绩查询,2021年广西美术高考成绩查询网址:https://www.gxeea.cn/...
- SQL数据库“单个用户”不能访问,设置为多个用户的解决方法
- 代码管理学:功能实现,一定要与界面分开
- 《深入浅出统计学》笔记二--第二章:集中趋势的量度,第三章:分散性与变异性的量度
- php 连接 sybase,thinkphp连接sybase数据库
- 科普类毕业论文文献包含哪些?
- juniper防火墙软件升级
- EU Long-term Dataset with Multiple Sensors for Autonomous Driving
- IE11卸载不掉的问题
- Feinstein Institute研究人员解码脑沟和白质区域的神经活动,预测手指运动和手部触觉刺激...
- 大学生极速成长系列教程—7.IT类大学生如何打造个人品牌
- Unity | 如何使用webm透明视频