进程间通信:进程之间必须需要中间件。

不同进程间内存是不共享的,要想实现两个进程间的数据交换
 
 
Queues:实现传输两个进程的数据
  线程queue,访问数据只能在一个进程内进行线程与线程之间的访问。
  进程queue,可以作为一个中间键来实现两个进程的数据交互,queue通过,pickle的方式序列化父进程将数据取,在反序列化给子进程,实际上是克隆了一分数据。
from multiprocessing import Process, Queue

def f(q): # 主进程传入数据
q.put([42, None, 'hello']) if __name__ == '__main__': # 实例化进程queue
q = Queue() # 实例一个子进程,调用f,args=获取q.put克隆数据
p = Process(target=f, args=(q,)) # 执行进程
p.start() # 获取数据
print(q.get()) # 等待进程执行完
p.join()
 
Pipes:实现链接进程数据的传递
  返回由管道连接的一对连接对象,默认情况下是双向的,与socket类似建立两端。
from multiprocessing import Process, Pipe
def f(conn): # 子进程发送父进程端
conn.send([42, None, 'hello from child'])
print(conn.recv())
conn.close() if __name__ == '__main__': # 生成管道实例。
# 生成两个管道对象:parent_conn主,child_conn子
parent_conn, child_conn = Pipe() # 生成主进程 args=连接对象
p = Process(target=f, args=(child_conn,))
p.start() # 接收子进程端
print(parent_conn.recv())
parent_conn.send("Stupid son")
p.join()
Managers:实现进程间数据的共享
  manager返回的Managers()控制一个服务器进程,该进程包含Python对象,并允许其他进程使用代理操纵它们。
  由manager()返回的管理器将支持类型列表、命令、名称空间、锁、锁、信号量、BoundedSemaphore、条件、事件、Barrier、队列、值和数组。
  managers表面看的共享,实际上是克隆了n个数据后,在合成。
from multiprocessing import Process, Manager
import os def f(d, l): # 存入每个进程PID到字典
d[os.getpid()] = os.getpid() # 每个进程放入进程ID
l.append(os.getpid())
print(l) if __name__ == '__main__': # Manager() 赋值变量为 manager
with Manager() as manager: # 生成一个字典.dict(),可在多个进程传递共享的字典
d = manager.dict() # 生成一个列表.list(),可在多个进程传递共享的列表
l = manager.list()
p_list = []
for i in range(10): # 生成10个进程,args=(字典,列表)
p = Process(target=f, args=(d, l)) # 执行进程
p.start() # 对象存放在空的列表内
p_list.append(p) # 等待结果
for res in p_list:
res.join() print(d)
print(l)

Python 进程间数据交互的更多相关文章

  1. 【python】-- 多进程的基本语法 、进程间数据交互与共享、进程锁和进程池的使用

    多进程 进程之间是相互独立的,python是启动进程的时候,是启动的是原生进程.进程是没有GIL锁的,而且不存在锁的概念,进程之间的数据式不能共享的,而线程是可以的. 1.进程的定义 用mulipro ...

  2. python进程间数据不共享(示例演示)

    import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(data_list) def run( ...

  3. Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程

    Python进阶----进程间数据隔离, join阻塞等待, 进程属性, 僵尸进程和孤儿进程, 守护进程 一丶获取进程以及父进程的pid 含义:    进程在内存中开启多个,操作系统如何区分这些进程, ...

  4. Python多进程-进程间数据的传递

    两个进程间的数据是独立的,要进行数据传递的话可通过几个方法 Queue 通过队列来进行进程间数据的传递 # -*- coding:utf-8 -*- __author__ = "MuT6 S ...

  5. python之 《进程之间数据交互和进程池》

    1.进程q 进程呢就相当于一个房子,线程就相当于是房子里面在工作的人,那么一个房子的空间对于房子里面的人来说是共享的, 现在是多进程,也就是说有许多房子,很显然这个房子的空间只属于这个房子,不会属于其 ...

  6. 子进程回收资源两种方式,僵尸进程与孤儿进程,守护进程,进程间数据隔离,进程互斥锁,队列,IPC机制,线程,守护线程,线程池,回调函数add_done_callback,TCP服务端实现并发

    子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multipr ...

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

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

  8. 04 . Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用

    vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...

  9. python 使用多进程实现并发编程/使用queue进行进程间数据交换

    import time import os import multiprocessing from multiprocessing import Queue, pool ""&qu ...

随机推荐

  1. 神经网络和误差逆传播算法(BP)

    本人弱学校的CS 渣硕一枚,在找工作的时候,发现好多公司都对深度学习有要求,尤其是CNN和RNN,好吧,啥也不说了,拿过来好好看看.以前看习西瓜书的时候神经网络这块就是一个看的很模糊的块,包括台大的视 ...

  2. poj 2069

    唔. 这道题的火候比较巧妙. 我们是每次找到一个最远的点,然后向那个最远点逼近. 这显然非常合理. #include <cstdlib> #include <cmath> #i ...

  3. 静态方法(staticmethod)和类方法(classmethod)

    类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用, ...

  4. TCP、UDP详解与抓包工具使用

    参考:https://www.cnblogs.com/HPAHPA/p/7737641.html TCP.UDP详解 1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间 ...

  5. 序列&权限&索引&视图的语句

    create sequence 订单_订单编号_seq -- 创建序列 (成功后在sequence中查询) increment by start with maxvalue nocycle nocac ...

  6. PAT甲级1026 Table Tennis【模拟好题】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560 题意: 有k张乒乓球桌,有的是vip桌 ...

  7. linux学习:【第3篇】远程连接及软件安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...

  8. day5_非空即真非零即真

    非空即真(字符串.元组.列表.字典.None),非零即真(指的是int类型或数字这种) # d={}# l=[]# t=()# a = ''# b = None以上都代表空 举例1: name = i ...

  9. Java学习-049-正则工具类

    自去年九月份决定再次入学和职业资格进阶,开始备战二者考试至今,以及当下进行中的职称申请,犹如孤独的狼,不断前行在路上,而今凡凡总总的已历8月... 不感慨了,如下为一园友需要的正则工具类,直接上码: ...

  10. Yarn vs npm: 你需要知道的一切(转)

    英文原文:https://www.sitepoint.com/yarn-vs-npm/ 译文:http://web.jobbole.com/88459/ Yarn 是 Facebook, Google ...