利用 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 进程间通信(下)的更多相关文章

  1. python进程间通信--信号Signal

    信号signal 是python进程间通信多种机制中的其中一种机制.可以对操作系统进程的控制,当进程中发生某种原因而中断时,可以异步处理这个异常. 信号通过注册的方式‘挂’在一个进程中,并且不会阻塞该 ...

  2. Python进程间通信和网络基础

    Python进程间通信和网络基础 Python支持多种进程间通讯的方式, 有单机通信的signal和mmap等, 也有可以通过网络的socket方式, 这里先介绍select等的有关知识, socke ...

  3. Python环境下NIPIR(ICTCLAS2014)中文分词系统使用攻略

    一.安装 官方链接:http://pynlpir.readthedocs.org/en/latest/installation.html 官方网页中介绍了几种安装方法,大家根据个人需要,自行参考!我采 ...

  4. Python多线程下的_strptime问题

    Python多线程下的_strptime问题 由于Python的datetime和time中的_strptime方法不支持多线程,运行时会报错: import datetimeimport threa ...

  5. Python的下划线_

    1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,"_"代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准C ...

  6. python环境下实现OrangePi Zero寄存器访问及GPIO控制

    最近入手OrangePi Zero一块,程序上需要使用板子上自带的LED灯,在网上一查,不得不说OPi的支持跟树莓派无法相比.自己摸索了一下,实现简单的GPIO控制方法,作者的Zero安装的是Armb ...

  7. 20170310 - Python 3 下 SQLAlchemy 的 MySQL 数据库 URI 配置

    MySQL-Python 只用于 Python 2,URI配置为 mysql://username:password@server/db Python 3 下要使用另一个 PyMySQL 包,相应的U ...

  8. python(七) Python中单下划线和双下划线

    Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from mod ...

  9. python单下划线与双下划线的区别

    Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...

随机推荐

  1. cmd下常用命令汇总

    1.获得文件夹内所有文件的文件名列表 dir *.png /b>list.txt 其中: (1)*.png表示筛选后缀为.png的文件 (2)/b为输出的模式.如下: 引用 /b 只有文件名  ...

  2. ③ 设计模式的艺术-03.工厂方法(Factory Method)模式

    public interface Car { void run(); } public class Audi implements Car { @Override public void run() ...

  3. GridControl详解(十)BandedGridView

    转换结果: 运行结果呈现:

  4. 初学者必看:.NET 中的静态与非静态的异同

    对于初学者来说,.NET 的静态和非静态一直比较难掌握,这里做一个总结,介绍静态类和普通类,静态方法和实例方法,静态构造函数和实例构造函数,静态字段和非静态字段的区别. 静态类 vs 普通类 静态类与 ...

  5. idea自动识别get set方法

  6. node、npm及node_modules中依赖的版本更新

    好久没用node了,想重新拾起来发现node还有相关模块的版本都太低了,使用npm install全是报版本低的警告. 这里记录一下,版本管理和node_modules更新的方法. 我用的是Windo ...

  7. LOW逼三人组(二)----选择排序算法

    选择排序思路: 算法程序: def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper(*args,**kwargs): t1=time.time() re ...

  8. redis的备份恢复

    说明:默认rdb方式保存,redis支持主从和哨兵等,但是在某些情况下我们会单机跑,所以有时候我们就会需要设计到备份恢复 环境:原始redis:192.168.1.200 新redis:192.168 ...

  9. 关于"轉淚點"与"轉捩點"

    经常看台湾偶像剧或台湾综艺节目的人,一定听过"转泪点"这个词,虽然我一直不知道这三个字具体是怎么写, 但其意思很容易明白,就是"转折点"的意思.今天无聊在看凤凰 ...

  10. MAC 文件被锁定

    从windows拷贝到MAC的文件,有时候会被锁定.右键-简介-已锁定也是灰色的,无法取消: xattr -l 文件名 xattr -d com.apple.FinderInfo 文件名