利用 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 高

最新文章

  1. Oracle数据库验证IMP导入元数据是否会覆盖历史表数据
  2. Drawing in Singapore
  3. [转]Objective-c中@interface、@implementation、@protocal
  4. 对字符串进行简单的字符数字统计 探索java中的List功能
  5. jquery 获取和设置 checkbox radio 和 select option的值?
  6. DS Tree 已知后序、中序 => 建树 => 求先序
  7. Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
  8. spark-shell --conf
  9. Python学习笔记10—几个名词概念
  10. call by reference and copy/restore
  11. 应用TcpListener实现的socket服务器端
  12. Warning: Attempt to present on whose view is not in模态跳转问题
  13. 远程连接mysql 授权方法详解
  14. eclipse远程调试Linux环境下的web项目
  15. html5滑动事件代码
  16. select下拉框左右变换
  17. Freemarker中的日期输出
  18. PHP与JavaScript下的Cookie操作
  19. CIFAR-10数据集读取
  20. mysql创建索引以及对索引的理解

热门文章

  1. HDU6130 签到题 打表
  2. java中集合去重1
  3. 从零搭建SSM框架(三)SSM框架整合
  4. java用于控制可见性的4个访问修饰符
  5. 在iOS开发中如何播放视频
  6. 大聊Python----迭代器
  7. 【文件上传】jquery之ajaxfileupload异步上传插件
  8. Ubuntu之设置应用开机自启动
  9. android的wake_lock介绍
  10. 运维小知识之nginx---nginx配置Jboss集群负载均衡