进程间数据传递:Queue,Pipe 进程间数据共享:Manager
1.使用multiprocessing模块的Queue实现数据传递
'''
进程间通讯:
Queue,用法跟线程里的Queue一样,put,get
线程queue没有做序列化,进程queue做序列化了
父进程的queue怎么传给子进程的?父进程的queue克隆了一份到子进程
按理说两个queue没关系了。子进程向queue里放东西,queue序列化到一个中间地方
父进程取就从中间地方反序列化,他们只是实现的数据的传递
'''
from multiprocessing import Queue,Process def f(q):
q.put("alex") if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
p.join()
print(q.get()) # alex
2.使用multiprocessing模块的Pipe实现数据传递
'''
进程间通讯:
管道,用法类似于socket
一次send对应一次recv,如果对应次数不对会出现阻塞
'''
from multiprocessing import Process
from multiprocessing import Pipe def f(conn):
conn.send([42,None,'hello'])
print(conn.recv())
conn.close() if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv())
parent_conn.send('hello world')
p.join()
'''
[42, None, 'hello']
hello world
'''
3.使用multiprocessing模块的Manager实现数据共享
'''
两个进程怎么同时修改一份数据?
即数据的共享,需要用到manager
其实是copy了几份,再合并。
manager支持的类型有:
list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.
manager是自动加锁的
'''
from multiprocessing import Manager,Process
import os
def f(d, l):
d[os.getpid()] = os.getpid()
l.append(os.getpid())
print(l) if __name__ == '__main__':
with Manager() as manager:
d = manager.dict() # 生成一个字典,可在多个进程间共享和传递
l = manager.list(range(5)) # 列表... p_list = []
for i in range(10):
p = Process(target=f, args=(d, l))
p.start()
p_list.append(p)
for res in p_list:
res.join()
print(d)
print(l)
'''
[0, 1, 2, 3, 4, 3088]
[0, 1, 2, 3, 4, 3088, 7092]
[0, 1, 2, 3, 4, 3088, 7092, 5256]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296, 5308]
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296, 5308, 6704]
{3088: 3088, 7092: 7092, 5256: 5256, 6460: 6460, 6696: 6696, 6796: 6796, 6640: 6640, 6296: 6296, 5308: 5308, 6704: 6704}
[0, 1, 2, 3, 4, 3088, 7092, 5256, 6460, 6696, 6796, 6640, 6296, 5308, 6704]
'''
进程间数据传递:Queue,Pipe 进程间数据共享:Manager的更多相关文章
- 详细介绍ASP.NET页面间数据传递的使用方法
源码:http://www.jinhusns.com/Products/Download/?type=xcj 在ASP.NET中,页面间数据传递的方法有很多.下面为大家总结一下,页面间数据传递的方法. ...
- ASP.NET页面间数据传递的方法<转>
ASP.NET页面间数据传递的方法 作者: 灰色的天空2 来源: 博客园 发布时间: 2010-10-28 11:06 阅读: 822 次 推荐: 0 原文链接 [收藏] 摘要:本 ...
- ASP.NET中实现页面间数据传递的方法
说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好. ASP.NET页面间数据传递 ...
- ASP.NET 页面间数据传递的方法
在做WEB开发时,很多地方会涉及到页面间的数据传递.这几天在完善教务基础系统,遇到了这个问题,上网查了一些资料,现总结如下: 说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是 ...
- Java并发:线程间数据传递和交换
转自:https://www.cnblogs.com/java-zzl/p/9741288.html 一.通过SynchronousQueue方式实现线程间数据传递: 线程A与线程B共同持有一个Syn ...
- [转]Angular2-组件间数据传递的两种方式
本文转自:https://www.cnblogs.com/longhx/p/6960288.html Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一 ...
- Angular2-组件间数据传递的两种方式
Angular2组件间数据传递有多种方式,其中最常用的有两种,一种是配置元数据(或者标签装饰),一种是用单例模块传递:有两个元数据具有传递数据的功能:inputs和outputs. 一.元数据传递 1 ...
- vue 组件间数据传递
父组件向子组件传值 方法一: 子组件想要使用父组件的数据,需要通过子组件的 props 选项来获得父组件传过来的数据. 1.父组件parent.vue中代码: <template> < ...
- postman-接口间数据传递
接口间数据传递 在我们做接口测试过程中会经常碰到使用上一个接口返回数据的情况,jmeter中可通过正则表达式提取,postman中如何提取呢?我们来看实例,这里使用的同一个接口来演示. 我们提取出 ...
随机推荐
- VM14安装Mas os 13
工具/原料 VMware Workstation unlocker(for OS X 插件补丁) macOS 10.13镜像 vmware tools 安装前准备 1 下载以上文件: 1. ...
- Android创建或删除了文件,在电脑端查看的时候,却没有对应的变化,处理办法
在Android应用中,碰到一个问题,在代码中执行创建或者删除某个文件后,在系统的文件管理器中能够相应地看到文件的变化,但是插在电脑上查看的时候,却看不到改文件的变化.同时,当创建文件后,在系统中的某 ...
- Android 开发工具类 19_NetworkStateReceiver
检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观 ...
- Linux~其实shell脚本也很简单
用了两个的centos之后,也想看看它的脚本,我们知道shell这个东西就像windows里的批处理,它可以将一些语句进行组合,然后统一去执行,感觉挺方便的. shell文件的组成 shell语言环境 ...
- Hadoop大数据挖掘从入门到进阶实战
1.概述 大数据时代,数据的存储与挖掘至关重要.企业在追求高可用性.高扩展性及高容错性的大数据处理平台的同时还希望能够降低成本,而Hadoop为实现这些需求提供了解决方案.面对Hadoop的普及和学习 ...
- Linux 终端下解压文件失败问题
Linux 终端下解压文件失败: # tar -zxvf *****.tar.bz2 tar 命令出错gzip: stdin: not in gzip format tar: Child return ...
- 补习系列-springboot-使用assembly进行项目打包
目录 springboot-maven插件 1. 项目打包Jar 2. 项目完整构建 3. 本地包依赖 参考文档 springboot-maven插件 springboot-maven插件 repac ...
- 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(1)- 环境搭建(Python2.7.14 + pySerial3.4 + wxPython4.0.3)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之环境搭建. 在写Jays-PyCOM时需要先搭好开发和调试环境,下表列出了开发过程中会用到的所有软 ...
- 关于跨DB增量(增、改)同步两张表的数据小技巧
有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...
- Maven教程(4)--Maven管理Oracle驱动包
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...