全局变量与Python多处理

2024-03-29 08:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
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]

在进程中使用全局变量时,我一定缺少一些微妙之处。这样做是可行的,还是应该避免以这种方式更改变量?


Tags: namefromtestimportforifmainvar