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

不同进程间内存是不共享的,要想实现两个进程间的数据交换
 
 
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. 【Zookeeper系列】ZooKeeper伸缩性(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4143306.html 一.ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我 ...

  2. WINDOWS自带md5校验工具

    WINDOWS自带的工具certutil.exe,   certutil -hashfile chropp.exe MD5; 就可以了

  3. java学习之路--String类方法的应用

    消除字符串两端的空格 1.判断字符串第一个位置是否为空格,如果是继续向下判断,直到不是空格位置,末尾也是这样,往前判断,直到不是空格为止. 2.当开始和末尾都不是空格时,获取字符串. public s ...

  4. vue动态组件切换(选项卡)

    vue的动态组件 <template :is='变量'></template> 可以通过改变变量,来改变template的替换内容.达到选项卡的功能 如果想要切换保持不重新创建 ...

  5. MySQL练习题2

    以下操作均在MySQL5.7数据库上实验无误 需要四张表 Student_new(Sid,Sname,Sage,Ssex)学生表 Sid:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生 ...

  6. 强制不使用“兼容性视图”的HTML代码

    转自:http://www.weste.net/2013/8-9/93109.html 在IE8浏览器以后版本,都有一个"兼容性视图",让不少新技术无法使用.那么如何禁止浏览器自动 ...

  7. 请大神留言:使用static方法和从Spring IOC 容器里面取出的方法有什么区别????

    类的静态方法,不用new出对象,因为它在类的初始化阶段加载到jvm内存的. 而spring容器,是在启动服务的时候,new出容器所管理的对象. 本质区别就是一个在堆中产生了对象,一个没产生对象只在方法 ...

  8. post方式接口测试(二)_参数化

    一.在postman中可设置环境变量和全局变量 二.设置好后直接在请求中使用: 三.get请求,需要将参数直接出现在URL上,直接点击 Params

  9. winform做的excel与数据库的导入导出

    闲来无事,就来做一个常用的demo,也方便以后查阅 先看效果图 中间遇到的主要问题是获取当前连接下的所有的数据库以及数据库下所有的表 在网上查了查,找到如下的方法 首先是要先建立一个连接 _connM ...

  10. AngularJs实现全选功能

    html代码 <!-- 数据表格 --> <div class="table-box"> <!--工具栏--> <div class=&q ...