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进程间的通讯实现的更多相关文章

  1. 进程间的通讯(IPC)方式

    内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 ...

  2. [转]WINDOW进程间数据通讯以及共享内存

    1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同 ...

  3. python 进程之间的通讯

    python 进程之间的通讯 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:15 # ...

  4. 【转】C++ 进程间的通讯(一):简单的有名管道实现

    原文: C++ 进程间的通讯(一):简单的有名管道实现 -------------------------------------------------- 进程间的通讯(一):简单的有名管道实现   ...

  5. python进程间共享数值、字典、列表变量

    ##python进程间共享数值.字典.列表变量 关注公众号"轻松学编程"了解更多. import multiprocessing def worker(num, mgr_dict, ...

  6. 8.7 进程间的通讯:管道、消息队列、共享内存、信号量、信号、Socket

    进程间的通讯 进程间为什么需要通讯? 共享数据.数据传输.消息通知.进程控制 进程间的通讯有哪些类型? 首先,联系前面讲过的知识,进程之间的用户地址空间是相互独立的,不能进行互相访问,但是,内核空间却 ...

  7. 进程间的通讯————IPC

    """ IPC 指的是进程间通讯 之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程 然而 进程内存是物理隔离的 解决方案: 1.将共享数据放 ...

  8. python 进程间共享数据 (二)

    Python中进程间共享数据,除了基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...

  9. .Net下的进程间的通讯 -- Windows消息队列

    Windows 消息队列(MSMQ),是微软Windows2000以上的操作系统的一个服务,可以提供在计算机间消息的可靠传输,用来在两个进程间进行异步通讯最合适不过了.在.Net中有一个Message ...

随机推荐

  1. Java安全之反序列化回显与内存马

    Java安全之反序列化回显与内存马 0x00 前言 按照我个人的理解来说其实只要能拿到Request 和 Response对象即可进行回显的构造,当然这也是众多方式的一种.也是目前用的较多的方式.比如 ...

  2. VLAN协议与三层交换机 (Access/Trubk/Hrbrid)

    VLAN协议与三层交换机(Access/Trunk/Hybrid) 目录 一.VLAN概述 1.1.分割广播域 1.2.VLAN的优势 1.3.静态VLAN 二.Trunk的作用 2.1.概念 2.2 ...

  3. 『无为则无心』Python基础 — 15、Python流程控制语句(for循环语句)

    目录 1.for循环语法 2.for循环中的break和continue 3.循环+else结构 (1)while...else (2)while...else退出循环的方式 (3)for...els ...

  4. 手把手教你实现一个支持插件化的 uTools 工具箱(一)

    前言 对于前端同学来说,我们会经常用到各种小工具,比如:图床.颜色拾取.二维码生成器.url 管理.文本比对.json 格式化.当然我们可以 chrome 收藏夹来管理各种在线的小工具,但作为一个有追 ...

  5. 在Excel中当遇到多个对象的目标值都不同时,如何快速设置条件格式突出未达标的对象

    1.选择实际值的一个单元格,选择条件格式,新建规则,选择图中选项. 2.这里选择大于,然后选择对比的单元格.选择需要的格式确定.(因为要对比的目标值不同,所以需要给单元格去掉绝对引用,也就是$符号). ...

  6. Visual Studio Code 和Visual Studio插件收集(持续更新)

    Visual Studio Code 插件收集 Chinese (Simplified) Language Pack 默认刚安装的VSC是原味英文的,如果你用不习惯,非常简单,官方出品的简体中文语言包 ...

  7. 春风十里不如你,全新Windows UI 3(WinUI 3) 的第一个实现Project Reunion 0.5

    什么是WinUI Windows UI库 (WinUI) 是适用于 Windows 桌面应用程序和 UWP 应用程序的本机用户体验 (UX) 框架. WinUI is a user interface ...

  8. MiniSMB 专业网络性能测试仪表 英特尔82576 4*1GE 网卡性能测试报告

    MiniSMB 专业网络性能测试仪表英特尔82576 4*1GE网卡性能测试报告 一.测试环境 测试配置 ①工控机配置: CPU:Intel(R) Core(TM) i7-6800K CPU @ 3. ...

  9. JS刷新窗口的几种方式

    浮层内嵌iframe及frame集合窗口,刷新父页面的多种方法   <script language=JavaScript>       parent.location.reload(); ...

  10. 深入理解 Go Map

    文章参考:Go语言设计与实现3.3 哈希表 哈希表的意义不言而喻,它能提供 O(1) 复杂度的读写性能,所以主流编程语言中都内置有哈希表. 哈希表的关键在于哈希函数, 好的哈希函数能减少哈希碰撞,提供 ...