全局变量和Python的多处理

问题描述:

可能重复:
Python multiprocessing global variable updates not returned to parent全局变量和Python的多处理

我使用一台计算机与多核心和性能优势,我真的应该使用一个以上的。不过,我很困惑,为什么这些代码位没有做什么,我希望:

from multiprocessing import Process 

var = range(5) 
def test_func(i): 
    global var 
    var[i] += 1 

if __name__ == '__main__': 
    jobs = [] 
    for i in xrange(5): 
     p = Process(target=test_func,args=(i,)) 
     jobs.append(p) 
     p.start() 

print var 

除了

from multiprocessing import Pool 

var = range(5) 
def test_func(i): 
    global var 
    var[i] += 1 

if __name__ == '__main__': 
    p = Pool() 
    for i in xrange(5): 
     p.apply_async(test_func,[i]) 

print var 

我希望得到的结果是[1, 2, 3, 4, 5]但结果是[0, 1, 2, 3, 4]

在进程中使用全局变量时,我一定会有一些微妙之处。这是甚至要走还是应该避免试图以这种方式更改变量?

+0

看这个问题 http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide

+0

你运行这些代码段一个脚本,还是在Python控制台内执行? –

+1

您应该使用多处理管理器来管理您的列表。 – mgilson

如果您正在运行两个单独的进程,那么它们将不会共享相同的全局变量。如果你想在这些进程之间传递数据,请看使用send和recv。看一下http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes的例子与你正在做的相似。