python进程间的通讯实现
1:进程间通讯的方法:apply_async()非阻塞式通讯 apply()阻塞式通讯
2:使用Queue实现对Process创建的进程间通讯,
Queue本身是一个消息队列程序,Queue常用方法:
Queue.qsize():返回当前消息队列的消息数量
Queue.empty():如果队列为空,返回true 否则返回false
Queue.full():如果队列满了,返回true,否则false
Queue.get():获取队列中的一条消息,然后将其从队列中移除
Queue.put(“xxx”):把内容存放进消息队列
Queue.get_nowait()相当于Queue.get(False) Queue.put_nowait()相当于Queue.put(False)
例子:
#叫做队列
from multiprocessing import Queue
from multiprocessing import Process
list = ["lipeng","王五","赵四"]
def write(q):
for temp in list:
print("---%s write to queue"%temp)
q.put(temp)
def read(q):
while 1:
if not q.empty():
value = q.get()
print("--get %s from queue"%value)
else:
print("queue is empty")
break
if __name__ == '__main__':
q = Queue()
pw = Process(target=write,args=(q,))
pr = Process(target=read,args=(q,))
pw.start()#启动子进程,开始写
pw.join()#等待pw进程结束
pr.start()
pr.join()
程序输出:

3: 进程池间通讯方式的实现
Process创建的进程可以使用Queue进行通讯,而进程池Pool创建的进程通讯使用Manager中的Queue来初始化,就不需要再导入Queue模块。
先看例子:
from multiprocessing import Pool,Manager
#from multiprocessing import Queue
def write(q):#定义写入队列的函数
list = ["111", "222", "555", "666"]
if not q.full():
for temp in list:
print("write %s to Queue"%temp)
q.put(temp)
else:
print("queue is full")
def read(q):
while True:
if not q.empty():
value = q.get()
print("get %s from queue"%value)
else:
print("queue ir empty")
print("所有数据读写完毕")
break
if __name__ == '__main__':
#创建队列
q = Manager().Queue()#使用Manager中的Queue来初始化
#创建写进程
po = Pool()
#使用阻塞模式创建进程,这样就不需要在read中使用死循环,可以让write执行完成后再用read进程
po.apply(write,(q,))
po.apply(read,(q,))
po.close()
po.join()
程序输出如下:

很累很累,但我还是要解释一下这个代码:
首先导入mutiprocessing模块下的Process类Manager类,定义write函数实现把数据写入队列,定义read函数实现对队列中的消息进行读取。
在write函数中以队列q(使用Manager中的Queue来初始化),判断队列是否满,遍历要写入的数据使用put方法写入。否则输出队列已满
在read函数中以队列q(使用Manager中的Queue来初始化),判断队列时候是空,使用get方法和遍历队列获取每一个队列中的值并输出。
在程序入口处先创建队列,声明进程池,在选择使用阻塞式模式创建进程,最后关闭子进程,结束父进程。
python进程间的通讯实现的更多相关文章
- 进程间的通讯(IPC)方式
内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 ...
- [转]WINDOW进程间数据通讯以及共享内存
1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同 ...
- python 进程之间的通讯
python 进程之间的通讯 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:15 # ...
- 【转】C++ 进程间的通讯(一):简单的有名管道实现
原文: C++ 进程间的通讯(一):简单的有名管道实现 -------------------------------------------------- 进程间的通讯(一):简单的有名管道实现 ...
- python进程间共享数值、字典、列表变量
##python进程间共享数值.字典.列表变量 关注公众号"轻松学编程"了解更多. import multiprocessing def worker(num, mgr_dict, ...
- 8.7 进程间的通讯:管道、消息队列、共享内存、信号量、信号、Socket
进程间的通讯 进程间为什么需要通讯? 共享数据.数据传输.消息通知.进程控制 进程间的通讯有哪些类型? 首先,联系前面讲过的知识,进程之间的用户地址空间是相互独立的,不能进行互相访问,但是,内核空间却 ...
- 进程间的通讯————IPC
""" IPC 指的是进程间通讯 之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程 然而 进程内存是物理隔离的 解决方案: 1.将共享数据放 ...
- python 进程间共享数据 (二)
Python中进程间共享数据,除了基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...
- .Net下的进程间的通讯 -- Windows消息队列
Windows 消息队列(MSMQ),是微软Windows2000以上的操作系统的一个服务,可以提供在计算机间消息的可靠传输,用来在两个进程间进行异步通讯最合适不过了.在.Net中有一个Message ...
随机推荐
- Java安全之反序列化回显与内存马
Java安全之反序列化回显与内存马 0x00 前言 按照我个人的理解来说其实只要能拿到Request 和 Response对象即可进行回显的构造,当然这也是众多方式的一种.也是目前用的较多的方式.比如 ...
- VLAN协议与三层交换机 (Access/Trubk/Hrbrid)
VLAN协议与三层交换机(Access/Trunk/Hybrid) 目录 一.VLAN概述 1.1.分割广播域 1.2.VLAN的优势 1.3.静态VLAN 二.Trunk的作用 2.1.概念 2.2 ...
- 『无为则无心』Python基础 — 15、Python流程控制语句(for循环语句)
目录 1.for循环语法 2.for循环中的break和continue 3.循环+else结构 (1)while...else (2)while...else退出循环的方式 (3)for...els ...
- 手把手教你实现一个支持插件化的 uTools 工具箱(一)
前言 对于前端同学来说,我们会经常用到各种小工具,比如:图床.颜色拾取.二维码生成器.url 管理.文本比对.json 格式化.当然我们可以 chrome 收藏夹来管理各种在线的小工具,但作为一个有追 ...
- 在Excel中当遇到多个对象的目标值都不同时,如何快速设置条件格式突出未达标的对象
1.选择实际值的一个单元格,选择条件格式,新建规则,选择图中选项. 2.这里选择大于,然后选择对比的单元格.选择需要的格式确定.(因为要对比的目标值不同,所以需要给单元格去掉绝对引用,也就是$符号). ...
- Visual Studio Code 和Visual Studio插件收集(持续更新)
Visual Studio Code 插件收集 Chinese (Simplified) Language Pack 默认刚安装的VSC是原味英文的,如果你用不习惯,非常简单,官方出品的简体中文语言包 ...
- 春风十里不如你,全新Windows UI 3(WinUI 3) 的第一个实现Project Reunion 0.5
什么是WinUI Windows UI库 (WinUI) 是适用于 Windows 桌面应用程序和 UWP 应用程序的本机用户体验 (UX) 框架. WinUI is a user interface ...
- MiniSMB 专业网络性能测试仪表 英特尔82576 4*1GE 网卡性能测试报告
MiniSMB 专业网络性能测试仪表英特尔82576 4*1GE网卡性能测试报告 一.测试环境 测试配置 ①工控机配置: CPU:Intel(R) Core(TM) i7-6800K CPU @ 3. ...
- JS刷新窗口的几种方式
浮层内嵌iframe及frame集合窗口,刷新父页面的多种方法 <script language=JavaScript> parent.location.reload(); ...
- 深入理解 Go Map
文章参考:Go语言设计与实现3.3 哈希表 哈希表的意义不言而喻,它能提供 O(1) 复杂度的读写性能,所以主流编程语言中都内置有哈希表. 哈希表的关键在于哈希函数, 好的哈希函数能减少哈希碰撞,提供 ...