全局变量和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]
。
在进程中使用全局变量时,我一定会有一些微妙之处。这是甚至要走还是应该避免试图以这种方式更改变量?
答
如果您正在运行两个单独的进程,那么它们将不会共享相同的全局变量。如果你想在这些进程之间传递数据,请看使用send和recv。看一下http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes的例子与你正在做的相似。
看这个问题 http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide
你运行这些代码段一个脚本,还是在Python控制台内执行? –
您应该使用多处理管理器来管理您的列表。 – mgilson