利用 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. 千里之行始于足下,node.js 资源中文导航

    响应@jiyinyiyong 号召,cnodjs 好的资源蛮多的,的确欠缺分类,在一群FAQ中,的确很容易沉下去,根据自己对node.js的理解,做成一个资源导航,PS:如果觉得合适,希望能够合并的c ...

  2. Eclipse 断点调试

    Eclipse 开发专用的Debug模式,用于发现问题解决问题. 1. 设置断点,程序会在改位置停止. 2. 按F5(step into), F6(step over)执行.F5指跳入,逐语句.会进入 ...

  3. 谈一谈我所了解的https

    一. http协议 首先我并不会很深入的去探讨这个东西,即使我曾经花了很长的时间去研究这个东西.主要是我考虑到1. 自己没有系统的去学习这一块的知识,讲解的会比较的肤浅.2. 就算是懂这个东西也不一定 ...

  4. Django之利用ajax实现图片预览

    利用ajax实现图片预览的步骤为: 程序实现的方法为: 方法一: upload.html <!DOCTYPE html> <html lang="en"> ...

  5. Web安全的三个攻防姿势

    原文地址:https://segmentfault.com/a/1190000011601837 作者: zwwill_木羽 关于Web安全的问题,是一个老生常谈的问题,作为离用户最近的一层,我们大前 ...

  6. 阿里分布式开源框架DUBBO 入门+ 进阶+ 项目实战视频教程

    史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...

  7. 转一篇:Reactor模式

    转载自:http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html 前记 第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑 ...

  8. Term Term ssh登陆linux后 显示乱码

    setup----terminal----locale----“chinese” OK!!!!!

  9. 手游研发CJ抱大腿指南

    文摘要:CJ来了,又是一年一度的游戏圈盛事,随着手游行业的迅速崛起,今年CJ上,手游研发商以及发行商必定成为焦点.由于门槛低.市场热.前景好等因素的影响,国内一下子蹦出一大堆手游研发团队.很幸运(或者 ...

  10. POJ 3169 Layout (spfa+差分约束)

    题目链接:http://poj.org/problem?id=3169 题目大意:n头牛,按编号1~n从左往右排列,可以多头牛站在同一个点,给出ml行条件,每行三个数a b c表示dis[b]-dis ...