全局变量和 Python 多处理 [重复]
Posted
技术标签:
【中文标题】全局变量和 Python 多处理 [重复]【英文标题】:Globals variables and Python multiprocessing [duplicate] 【发布时间】:2012-06-28 06:08:53 【问题描述】:可能重复: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]
。
在将全局变量与进程一起使用时,我肯定遗漏了一些微妙之处。这甚至是要走的路还是我应该避免尝试以这种方式更改变量?
【问题讨论】:
看这个问题***.com/questions/659865/… 您是从脚本运行这些代码 sn-ps,还是在 Python 控制台中执行? 您应该使用多处理管理器来管理您的列表。 多处理线程对全局变量所做的任何更改都不会在父进程中可见,因为线程接收到父内存的写时复制视图 【参考方案1】:如果您正在运行两个单独的进程,那么它们将不会共享相同的全局变量。如果要在进程之间传递数据,请查看使用 send 和 recv。请查看http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes 以获取与您正在做的类似的示例。
【讨论】:
以上是关于全局变量和 Python 多处理 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
python多处理是否通过全局标志变量安全地进行进程间信令?