python 进程间通信(下)
利用 Value,Array 先说明这个方法并不常用,因为有更灵活的方法
from multiprocessing import Process,Value,Array def f(n,a,not_share):
n.value=3.141
for i in range(len(a)):
a[i]=-a[i]
#更改共享内存
not_share.append(999)
print 'not_share:',not_share if __name__ == '__main__':
#这个是一个普通的列表
not_share=[1000]
#这个是导入的方法,可以进程共享内存的,’d‘代表数字并不是随便写的。后面的值也必须是数字
num=Value('d',123) #这里的’i‘代表列表,不是随便写的。利用这个方法可以进程间共享
arr = Array('i',range(10))
#启动子进程
p=Process(target=f,args=(num,arr,not_share))
p.start()
p.join() #可以通过这里的输出看出子进程将这个变量的值改了,注意 num.value,和正常的变量有所不同
print num.value
#这里和以前打印列表的方式也不一样,方法都被改造了所以才能实现进程间的共享
print arr[:]
#这里打印普通的列表,发现进程间无法更改内存
print 'not_share:',not_share
显示内容:
not_share: [1000, 999] 子进程里面修改成功,但是看下面父进程返回的值。并没有修改
3.141 共享内存已经被修改了
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9] 共享内存已经被修改了
not_share: [1000] 父进程打印的列表,子进程并没有修改内存成功
利用 manager方法:
可以支持的数据类型很多,列表、字典、锁、变量、信号、队列等。
#_*_coding:utf-8_*_
from multiprocessing import Process,Manager def f(d,l):
d[1]=''
d['']=2
#将列表内容反转
l.reverse() if __name__ == '__main__':
#先定义一下
manager=Manager()
#利用manager方法生成一个空字典
d=manager.dict()
#利用manager方法生成一个列表
l=manager.list(range(10)) p=Process(target=f,args=(d,l))
p.start()
p.join() print d
print l
显示内容:
{1: '1', '2': 2}
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
父进程中定义的字典和列表内容全部被子进程更改掉了
结论:
父进程和子进程内存中肯定是独立的,它们之间的修改就是借助第三方桥梁完成。并不是正真意义上的共享,manager是自带进程锁,在进行修改的时候不必担心多进程同时进行修改的问题。线程才是真正意义上的共享一个内存区域,但
线程不自带锁必须自己加锁。
manager比较灵活可以实现不同主机间的进程共享(听着好像很牛逼),但是效率没有Value,Array 高
python 进程间通信(下)的更多相关文章
- python进程间通信--信号Signal
信号signal 是python进程间通信多种机制中的其中一种机制.可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常. 信号通过注册的方式‘挂’在一个进程中,并且不会阻塞该 ...
- Python进程间通信和网络基础
Python进程间通信和网络基础 Python支持多种进程间通讯的方式, 有单机通信的signal和mmap等, 也有可以通过网络的socket方式, 这里先介绍select等的有关知识, socke ...
- Python环境下NIPIR(ICTCLAS2014)中文分词系统使用攻略
一.安装 官方链接:http://pynlpir.readthedocs.org/en/latest/installation.html 官方网页中介绍了几种安装方法,大家根据个人需要,自行参考!我采 ...
- Python多线程下的_strptime问题
Python多线程下的_strptime问题 由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错: import datetimeimport threa ...
- Python的下划线_
1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,"_"代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准C ...
- python环境下实现OrangePi Zero寄存器访问及GPIO控制
最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...
- 20170310 - Python 3 下 SQLAlchemy 的 MySQL 数据库 URI 配置
MySQL-Python 只用于 Python 2,URI配置为 mysql://username:password@server/db Python 3 下要使用另一个 PyMySQL 包,相应的U ...
- python(七) Python中单下划线和双下划线
Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from mod ...
- python单下划线与双下划线的区别
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...
随机推荐
- ZOJ 3774 二次剩余
LINK 题意:简单粗暴,求菲波那契数列每个数的m次的前n项和模1e9+7 思路:斐波那契通项式, 注意到有很多根号5,求二次剩余为5模1e9+7的解,显然我们可以直接找一个(383008016),然 ...
- DELPHI中的快捷方式一览(完全版)
1.SHIFT+鼠标左键 先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样)2.Shift+F8 调试时弹出CPU窗口.3.Shift+F10 等于 ...
- 10款好用的 jQuery 图片切换效果插件
jQuery 是一个非常优秀的 Javascript 框架,使用简单灵活,同时还有许多成熟的插件可供选择.其中,最令人印象深刻的应用之一就是对图片的处理,它可以让帮助你在你的项目中加入一些让人惊叹的效 ...
- BestCoder Round92
题目链接:传送门 HDU 6015-6018 解题报告:传送门 HDU6015 Skip the Class Accepts: 678 Submissions: 1285 Time Limit: ...
- DAG blockchain (byteball)
转载参考自: https://www.jinse.com/bitcoin/116184.html https://www.jinse.com/blockchain/116175.html https: ...
- linux动态库编译和使用详细剖析 - 后续
引言 - 也许是修行 很久以前写过关于动态库科普文章, 废话反正是说了好多. 核心就是在 linux 上面玩了一下 dlopen : ) linux动态库编译和使用详细剖析 - https://www ...
- WPF拖动DataGrid滚动条时内容混乱的解决方法
WPF拖动DataGrid滚动条时内容混乱的解决方法 在WPF中,如果DataGrid里使用了模板列,当拖动滚动条时,往往会出现列表内容显示混乱的情况.解决方法就是在Binding的时候给Update ...
- java基础13 接口(及关键字:interface、implements)
接口 1.接口的定义格式 interface 接口名{ } interface :接口的关键字 implements:实现接口的关键字 2.接口的作用 1.程序的解耦.(低耦合) 2.定 ...
- webservice使用
soap方法 一:PHP本身的SOAP 所有的webservice都包括服务端(server)和客户端(client). 要使用php本身的soap首先要把该拓展安装好并且启用.下面看具体的code ...
- 产生唯一的临时文件mkstemp()
INUX下建立临时的方法(函数)有很多, mktemp, tmpfile等等. 今天只推荐最安全最好用的一种: mkstemp. mkstemp (建立唯一临时文件)头文件: #include < ...