全局变量和Python多进程技术

43

可能是重复问题:
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]

在使用进程的全局变量方面,我可能忽略了一些微妙之处。这是否是正确的方式,还是应该避免以这种方式更改变量?


看看这个问题:https://dev59.com/sXRB5IYBdhLWcg3wUVxd - 8bitwide
你是从脚本中运行这些代码片段,还是在 Python 控制台中执行? - Christian Witts
1
你应该使用多进程管理器来管理列表。 - mgilson
1
多进程线程对全局变量所做的任何更改都不会在父进程中可见,因为该线程接收到父进程内存的写入副本视图。 - Gearoid Murphy
1个回答

32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接