多进程共享/同步
Array/ Value
#!/usr/bin python
#coding=utf-8
from multiprocessing import Process,Array,Value
def f(n,a):
n.value = 3.1415926
for i in range(5):
a[i] = -a[i]
if __name__ == '__main__':
num = Value('d',0.0)
arr = Array('i',range(10))
print num.value
print arr[:]
p = Process(target=f,args=(num,arr))
p.start()
p.join()
print num.value
print arr[:]
#!/usr/bin python
#coding=utf-8
from multiprocessing import Process,Array,Value
def f(n,a,raw_list):
n.value = 3.1415926
for i in range(5):
a[i] = -a[i]
raw_list.append(9999)
print raw_list[:]
if __name__ == '__main__':
num = Value('d',0.0)
arr = Array('i',range(10))
raw_list = range(10)
print num.value
print arr[:]
p = Process(target=f,args=(num,arr,raw_list))
p.start()
p.join()
print num.value
print arr[:]
print raw_list[:]
这个进程pclone了父进程的一份数据,raw_list是它那个进程修改了,但原来父进程的raw_lsit还是原来的值
you understand!!
子进程会复制父进程的数据,所以在子进程里面修改的值在父进程中不会改变的。要使用multiprocessing里面的Array和Value
manager
manager就是一个中介、桥梁(proxy),搭起两个进程数据同步的桥梁。
manager自己就有锁Lock,不用管内部实现机制,直接用就好了。
很好很强大,推荐使用这种方式。
用好python官网文档,一个巨大的资源宝库。
#!/usr/bin python
#coding=utf-8
from multiprocessing import Process,Manager
def f(d,l):
d['0'] = None
d['1'] = '111'
d[2] = 222
l.reverse()
print d
print l[:]
if __name__ == '__main__':
manager = Manager()
d = manager.dict()
l = manager.list(range(10))
p = Process(target=f,args=(d,l))
p.start()
p.join()
print d
print l[:]