全局变量和 Python 多处理



可能的重复项:
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].

在将全局变量与进程一起使用时,我一定缺少一些微妙之处。这甚至是要走的路还是我应该避免尝试以这种方式更改变量?

如果您正在运行两个单独的进程,则它们不会共享相同的全局变量。如果要在进程之间传递数据,请查看使用发送和 recv。查看 http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes,了解与您正在执行的操作类似的示例。

相关内容

  • 没有找到相关文章

最新更新