python 进程间通信(下)
2016-08-30 15:01
309 查看
利用 Value,Array 先说明这个方法并不常用,因为有更灵活的方法
显示内容:
not_share: [1000, 999] 子进程里面修改成功,但是看下面父进程返回的值。并没有修改
3.141 共享内存已经被修改了
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9] 共享内存已经被修改了
not_share: [1000] 父进程打印的列表,子进程并没有修改内存成功
利用 manager方法:
可以支持的数据类型很多,列表、字典、锁、变量、信号、队列等。
显示内容:
{1: '1', '2': 2}
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
父进程中定义的字典和列表内容全部被子进程更改掉了
结论:
父进程和子进程内存中肯定是独立的,它们之间的修改就是借助第三方桥梁完成。并不是正真意义上的共享,manager是自带进程锁,在进行修改的时候不必担心多进程同时进行修改的问题。线程才是真正意义上的共享一个内存区域,但
线程不自带锁必须自己加锁。
manager比较灵活可以实现不同主机间的进程共享(听着好像很牛逼),但是效率没有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]='1' d['2']=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 socket之进程间通信
- Python socket 实现进程间通信
- python 进程间通信(上)
- python 多进程 —— 进程间通信
- python 进程间通信
- Python进程间通信之匿名管道
- Python进程间通信用法实例
- python 进程间通信
- python 进程间通信【转】
- Linux下Python与C程序进程间通信
- python进程间通信 实例
- 如何使用Python实现进程间通信
- python实现进程间通信简单实例
- Python使用Socket 进行进程间通信
- 通过Python脚本理解系统进程间通信
- Linux下Python与C程序进程间通信
- python执行子进程实现进程间通信的方法
- python 进程间通信
- python---进程与线程(四)---process类,进程间通信,进程池,协程