python实现多进程通信实例分析

这篇文章主要介绍了Python实现多进程通信实例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们可以仔细看看 。

python实现多进程通信实例分析

文章插图
 
操作系统会为每一个创建的进程分配一个独立的地址空间,不同进程的地址空间是完全隔离的,因此如果不加其他的措施,他们完全感觉不到彼此的存在 。那么进程之间怎么进行通信?他们之间的关联是怎样的?实现原理是什么?本文就来借助Python简单的聊一下进程之间的通信?还是那句话,原理是相同的,希望能透过具体的例子来体会一下本质的东西 。
下面尽量以简单的方式介绍一下每一类通信方式,具体的细节可以参照文档使用;
1. 管道
先来看一下最简单、古老的一种IPC:管道 。通常指的是无名管道,本质上可以看做一种文件,只存在于内存当中,不会存盘 。不同进程通过系统提供的接口来向管道中读取或者写入数据 。
也就是说我们通过这样一个中间介质为进程提供交流的方式 。无名管道的局限在于一般只用于有直接关联关系的父子进程 。下面通过一个简单的例子来看一下其用法 。
from multiprocessing import Process, Pipe def pstart(pname, conn): conn.send("Data@subprocess") print(conn.recv()) # Data@parentprocess if __name__ == '__main__': conn1, conn2 = Pipe(True) sub_proc = Process(target=pstart, args=('subprocess', conn2,)) sub_proc.start() print (conn1.recv()) # Data@subprocess conn1.send("Data@parentprocess") sub_proc.join()管道通信三步曲:
  1. 创建Pipe,得到两个connection对象conn1和conn2;
  2. 父进程持有conn1,将conn2传递给子进程;
  3. 父子进程通过对持有的connection对象进行send和recv操作以进行数据传递和接受;
上面我们创建的是全双工管道,也可以创建半双工管道,具体使用可以参照官网描述:
Returns a pair (conn1, conn2) of Connection objects representing the ends of a pipe.
If 


    推荐阅读