全局变量和Python多处理

时间:2012-06-26 20:39:36

标签: python global-variables multiprocessing

  

可能重复:
  Python multiprocessing global variable updates not returned to parent

我正在使用具有多个内核的计算机,并且为了性能优势,我应该使用多个。但是,我很困惑为什么这些代码不符合我的期望:

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]

在使用全局变量和进程时,必须有一些微妙之处。这是偶然的方式还是我应该避免尝试以这种方式改变变量?

1 个答案:

答案 0 :(得分:10)

如果您正在运行两个单独的进程,那么他们将无法共享相同的全局变量。如果要在进程之间传递数据,请查看使用send和recv。请查看http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes以获取与您正在执行的操作类似的示例。