python进程间通信

news2024/9/25 15:29:47

进程间通信表示进程之间的数据交换。 为了开发并行应用程序,需要在进程间交换数据。 下图显示了多个子过程之间同步的各种通信机制 -
在这里插入图片描述

各种通信机制

队列

队列可以用于多进程程序。 多处理模块的Queue类与Queue.Queue类相似。 因此,可以使用相同的API。 Multiprocessing.Queue提供了进程间通信的线程和进程安全FIFO(先进先出)机制。

例子

下面是一个简单的例子,从python官方文档多处理了解Queue类的多处理概念

from multiprocessing import Process, Queue
import queue
import random
def f(q):
   q.put([42, None, 'hello'])
def main():
   q = Queue()
   p = Process(target = f, args = (q,))
   p.start()
   print (q.get())
if __name__ == '__main__':
   main()

执行上面示例代码,得到以下结果 -

[42, None, 'hello']

管道

它是一种数据结构,用于在多进程程序中的进程之间进行通信。Pipe()函数返回一对由管道连接的连接对象,默认情况下是双工(双向)。 它的工作原理如下 -
它返回一对代表管道两端的连接对象。
每个对象都有两个方法 - send()和recv(),以在进程之间进行通信。

例子

下面是一个简单的例子,摘自python官方文档多处理,以理解Pipe()函数的多进程概念

from multiprocessing import Process, Pipe

def f(conn):
   conn.send([42, None, 'hello'])
   conn.close()

if __name__ == '__main__':
   parent_conn, child_conn = Pipe()
   p = Process(target = f, args = (child_conn,))
   p.start()
   print (parent_conn.recv())
   p.join()

执行上面代码,得到以下结果 -

[42, None, 'hello']

管理器

Manager是一类多处理模块,它提供了一种协调所有用户之间共享信息的方式。管理器对象控制服务器进程,该进程管理共享对象并允许其他进程操纵它们。 换句话说,管理器提供了一种方法来创建可以在不同进程之间共享的数据。 以下是Manager对象的不同属性 -

  • 管理器的主要属性是控制管理共享对象的服务器进程。
  • 另一个重要属性是在任何进程修改它时更新所有共享对象。
例子

以下是使用管理器对象在服务器进程中创建列表记录,然后在该列表中添加新记录的示例。

import multiprocessing

def print_records(records):
   for record in records:
      print("Name: {0}\nScore: {1}\n".format(record[0], record[1]))

def insert_record(record, records):
   records.append(record)
      print("A New record is added\n")

if __name__ == '__main__':
   with multiprocessing.Manager() as manager:

      records = manager.list([('Computers', 1), ('Histoty', 5), ('Hindi',9)])
      new_record = ('English', 3)

      p1 = multiprocessing.Process(target = insert_record, args = (new_record, records))
      p2 = multiprocessing.Process(target = print_records, args = (records,))
      p1.start()
      p1.join()
      p2.start()
      p2.join()

执行上面代码,得到以下结果 -

A New record is added

Name: Computers
Score: 1

Name: Histoty
Score: 5

Name: Hindi
Score: 9

Name: English
Score: 3

管理器命名空间的概念

Manager类带有名称空间的概念,这是一种在多个进程间共享多个属性的快速方法。 命名空间不具有任何可以调用的公共方法,但它们具有可写的属性。

例子

以下Python脚本示例如何使用命名空间在主进程和子进程之间共享数据 -

import multiprocessing

def Mng_NaSp(using_ns):

   using_ns.x +=5
   using_ns.y *= 10

if __name__ == '__main__':
   manager = multiprocessing.Manager()
   using_ns = manager.Namespace()
   using_ns.x = 1
   using_ns.y = 1

   print ('before', using_ns)
   p = multiprocessing.Process(target = Mng_NaSp, args = (using_ns,))
   p.start()
   p.join()
   print ('after', using_ns)

执行上面示例代码,得到以下结果 -

before Namespace(x = 1, y = 1)
after Namespace(x = 6, y = 10)

Ctypes数组和值

Multiprocessing模块提供了Array和Value对象,用于将数据存储在共享内存映射中。 Array是从共享内存分配的Array和Value是从共享内存分配的ctypes对象。
Multiprocessing模块导入Process,Value,Array。

例子

下面的Python脚本是一个从python文档中获取的例子,它利用Ctypes Array和Value在进程间共享一些数据。

def f(n, a):
   n.value = 3.1415927
   for i in range(len(a)):
   a[i] = -a[i]

if __name__ == '__main__':
   num = Value('d', 0.0)
   arr = Array('i', range(10))

   p = Process(target = f, args = (num, arr))
   p.start()
   p.join()
   print (num.value)
   print (arr[:])

执行上面示例代码,得到以下结果 -

3.1415927
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

顺序进程(CSP)

CSP用于说明系统与具有并行模型的其他系统的交互。 CSP是通过消息传递编写并发或编程的框架,因此它对于描述并发是有效的

Python PyCSP库

要实现在CSP中找到的核心原语,Python有一个名为PyCSP的库。 它使实现非常简短和易读,因此可以非常容易地理解它。 以下是PyCSP的基本流程网络 -
在这里插入图片描述

在上面的PyCSP过程网络中,有两个过程 - 进程1和进程2。这些过程通过传递消息通过两个通道 - 通道1和通道2进行通信

安装PyCSP

通过以下命令来安装Python的PyCSP库 -

pip install PyCSP
例子

下面的Python脚本是一个简单的例子,它可以并行运行两个进程。 它是在PyCSP库的帮助下完成的

from pycsp.parallel import *
import time
@process
def P1():
   time.sleep(1)
   print('P1 exiting')
@process
def P2():
   time.sleep(1)
   print('P2 exiting')
def main():
   Parallel(P1(), P2())
   print('Terminating')
if __name__ == '__main__':
   main()

在上面的脚本中,已经创建了两个函数,即P1和P2,然后用@process进行装饰,将它们转换为进程。执行上面代码后,得到以下输出结果 -

P2 exiting
P1 exiting
Terminating

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【带你搞定第二、三、四层交换机】

​ 01 第二层交换机 OSI参考模型的第二层叫做数据链路层,第二层交换机通过链路层中的MAC地址实现不同端口间的数据交换。 第二层交换机主要功能,就包括物理编址、错误校验、帧序列以及数据流控制。 因为这是最基本的交换技术产品,目前桌面…

07-PL/SQL基础(if语句,case语句,循环语句)

本章主要内容: 1.PL/SQL的基本构成:declare,begin,exception,end; 2.结构控制语句:IF语句,CASE语句 3.循环结构:loop循环,for loop循环,while loop循环 PL/SQL的基本构成 特点 PL/SQL语言是SQL语言的扩展&#xff…

JS学习笔记day03

今日内容 零、 复习昨日 CSS 美化,复用,样式文件和表现文件分离便于维护 选择器 {属性:值;…} 引入css 内联文件内部使用style标签外部文件 <link href"路径" rel"stylesheet" type"text/css"> 选择器 基本 idclass标签名 属性 标签名…

【并发编程】深入理解Java内存模型及相关面试题

文章目录优秀引用1、引入2、概述3、JMM内存模型的实现3.1、简介3.2、原子性3.3、可见性3.4、有序性4、相关面试题4.1、你知道什么是Java内存模型JMM吗&#xff1f;4.2、JMM和volatile他们两个之间的关系是什么&#xff1f;4.3、JMM有哪些特性/能说说JMM的三大特性吗&#xff1f…

从新手小白到运维大咖,SysOM 多场景宕机实例解析 | 龙蜥技术

文/刘馨蔚&#xff0c;系统运维 SIG Contributor “老板老板&#xff0c;今天业务又发生了抖动&#xff0c;具体原因暂时还不能快速查清&#xff0c;再给我点时间吧。” “老板老板&#xff0c;这个问题我好像解过&#xff0c;但是也不太确定&#xff0c;我再重新分析一次吧。…

Django/Vue实现在线考试系统-05-开发环境搭建-PyCharm安装

1.0 PyCharm下载和安装 PyCharm 是 JetBrains 公司(www.jetbrains.com)研发,用于开发 Python 的 IDE 开发工具。图 1 所示为 JetBrains 公司开发的多款开发工具,其中很多工具都好评如潮,这些工具可以编写 Python、C/C++、C#、DSL、Go、Groovy、Java、JavaScript、Objecti…

关于kafka,你背了哪些面试题(持续更新中)

昨天面试大数据开发岗位&#xff0c;面试官问了一个开放性的问题&#xff0c;讲讲你对kafka的认识&#xff0c;一下有些懵住&#xff0c;不知道从哪里开始谈起。 今天和另外一个大佬聊天&#xff0c;他告诉我&#xff0c;就是要背面试题&#xff0c;背面试题是一种有效的学习方…

如何把iPhone照片导入电脑?图文教学,1分钟教你快速导入

​在日常生活中&#xff0c;我们经常会用iPhone拍摄照片&#xff0c;但是iPhone的存储空间有限&#xff0c;随着照片的增加&#xff0c;存储空间会越来越少。因此&#xff0c;把iPhone照片导入电脑成为了很多人需要解决的问题。那么&#xff0c;如何把iPhone照片导入电脑呢&…

Linux上安装配置ZooKeeper

Linux上安装配置ZooKeeper 下载压缩文件 将压缩文件拷贝到指定目录下 执行命令 tar -zxvf [apache-zookeeper-3.5.7-bin.tar.gz] -C [/opt/module/]注&#xff1a;第一个括号里面是压缩文件名称&#xff0c;第二个括号里面是解压到指定的目录 进入到解压后的文件夹当中&am…

KDHG-A变频互感器综合测试仪

一、概述 KDHG-A电流互感器现场综合测试仪是一种专门为测试互感器&#xff1a;伏安特性、变比、极性、误差曲线、计算拐点和二次侧回路检查等设计的多功能现场试验仪器。 二、主要特点 1&#xff0e;单机220V输入时最大电压输出0-2500V&#xff0c;单机最大电流输出0-1000A&am…

我的同事用PicSo AI这款绘画软件,连夜生成了100个“女朋友”

最近的AI绘画实在是太火爆了&#xff01; 有人用它来生成商业插画&#xff0c;有人用它来测试AI的智商&#xff0c;有人用它来为小说生成配图&#xff0c;有人在它的作品中寻找灵感… 而我的同事&#xff0c;用AI软件给自己画了将近100个漂亮的女朋友&#xff01; 而这款令…

美颜SDK关键技术讲解——人脸识别与人脸美化

拍摄&#xff0c;自从智能手机普及之后就已经不再是小众爱好&#xff0c;使用手机拍摄记录生活几乎成了人们的日常。在巨量的需求下&#xff0c;美颜工具、美颜SDK已经被广泛应用于各大视频拍摄平台。虽然经常听到美颜SDK&#xff0c;但是大多数人并不了解它&#xff0c;下文小…

【量化交易笔记】4.移动平均值的实现

上一讲已经讲A股的数据下载到本地或保存数据库&#xff0c;我们可以随时使用。 移动平均MA(Moving Average) &#xff0c;是用统计分析的方法&#xff0c;将一定时期内的证券价格&#xff08;指数&#xff09;加以平均&#xff0c;并把不同时间的平均值连接起来&#xff0c;形成…

Git 分支管理常用指令

不同分支有着自己的工作区和本地仓库&#xff0c;相互之间看不到&#xff0c;也影响不到&#xff0c;只有在合并分支的时候&#xff0c;才会将某一个分支做出的修改更新到另一个分支上。 目录 1、git branch&#xff08;分支查看、创建、删除&#xff09; (1) 查看分支 (2) …

园区网双出口问题解决方案

园区网双出口拓扑图公司向运营商租⽤两条带宽&#xff0c;ISP1为100M&#xff0c;ISP2为50M&#xff0c;默认情况下园区⽤户访问Internet优先⾛ISP1链路&#xff0c;请提供解决⽅案。解决方案1&#xff1a;接入路由为静态时解决方案2&#xff1a;当接入为动态路由时解决方案3&a…

荣耀MagicBook电脑系统损坏怎么U盘重装系统?

荣耀MagicBook电脑系统损坏怎么U盘重装系统&#xff1f;有用户电脑开机之后&#xff0c;无法正常进入桌面了&#xff0c;而是变成了一个蓝屏的界面。通过重启和进行系统修复都没有用。这个情况只有去进行U盘重装系统了。接下来我们就来看看以下详细的重装系统方法教学吧。 准备…

Python之函数参数细讲

文章目录前言一、了解形式参数和实际参数1. 通过作用理解2. 通过一个比喻来理解形式参数和实际参数二、位置参数1. 数量必须与定义时一致2. 位置必须与定义时一致三、关键字参数四、为参数设置默认值五、可变参数1. *parameter2. **parameter总结前言 在调用函数时&#xff0c;…

Spark MLlib概述

Spark MLlib概述机器学习房价预测模型选型数据探索数据提取准备训练样本模型训练模型效果评估机器学习 机器学习的过程 : 基于历史数据&#xff0c;机器会根据一定的算法&#xff0c;尝试从历史数据中挖掘并捕捉出一般规律再把找到的规律应用到新产生的数据中&#xff0c;从而…

【拜占庭将军问题】这一计谋,可以让诸葛丞相兴复汉室

我们都知道&#xff0c;诸葛亮第一次北伐是最可能成功的&#xff0c;魏国没有防备&#xff0c;还策反了陇西&#xff0c;陇西有大量的马匹可以装备蜀国骑兵&#xff0c;可惜街亭一丢&#xff0c;那边就守不住了 当时我不在&#xff0c;只能作诗一首~ 如果穿越过去&#xff0c;…

SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法(内含源代码)

SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法&#xff08;内含源代码&#xff09; 源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87549575 目录SpringBoot下的Spring——DAY0…