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

不同进程间内存是不共享的,要想实现两个进程间的数据交换
 
 
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. Oracle 行列转置

    两种简单的行列转置 1.固定列数的行列转换如student   subject    grade--------- ---------- --------student1  语文       80st ...

  2. hello 2019 D

    一开始sb了考虑总的因子疯狂T,做题太少了...没意识到会有辣么多因子... 神仙说1e9以内的最多的就有800个因子的了... 然后我们可以考虑质因子 我觉得已经说得很明白了... 唔逆元好像exg ...

  3. java课程课后作业05之动手动脑

    一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...

  4. npm 发布包(publish)

    λ npm init // 建包,信息填写好 λ npm adduser // 创建npm账户 填写账号,密码,邮箱 λ npm whoami // 查看当前登录的是谁 ajanuw 登录 λ npm ...

  5. JBPM工作流(四)——管理流程定义

    概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程.报销流程.是一个规则. ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程 ...

  6. C#压缩图片时保留原始的Exif信息

    啥是Exif信息,有啥用,百度百科有解释: Exif百科 总之,这东西对摄影爱好者来说是不可或缺的,通常使用Photoshop来压缩只要不是保存为Web格式都会保留Exif信息. 而我们写代码来压缩图 ...

  7. 洛谷P2949 工作调度Work Scheduling [USACO09OPEN] 贪心

    正解:贪心+并查集(umm不用并查集也成qwq 解题报告: 水题?主要感觉想到了俩方法然后还只实现了一个,怕忘了所以想着开个新坑记录下qwq 然后先放下传送门QAQ(哦这题和supermarket,双 ...

  8. time和datetime和tzinfo

    time和datetime模块还有tzinfo (时区)(一直不明白两者的区别,然后摘了两片文章(最后面的两个链接),很清晰...) 一.time模块 常用函数 1. time()函数 time()函 ...

  9. Python 总结

    python3.7下载地址 Python安装pip 1.首先检查linux有没有安装python-pip包,直接执行 yum install python-pip 2.没有python-pip包就执行 ...

  10. 建立请求号 request

    1:获取TR号(一般由团队的负责人创建,发出) 2:进入 i7p系统 3:点击process 4:输入tr号 5:选中 正确的请求号,右键> process item> add task ...