多处理模块和全局变量

时间:2014-04-07 14:53:24

标签: python global-variables multiprocessing

我试图理解多处理和全局变量。我试图在3个不同的地方声明pool

import multiprocessing as mp

# 1) AttributeError: 'module' object has no attribute 'f'
#pool = mp.Pool( processes = 2 )

def f(x) :
  print x

# 2) no error
pool = mp.Pool( processes = 2 )

a = range(5) 

# 3) no error
#pool = mp.Pool( processes = 2 )
pool.map( f, a)

pool.close()
pool.join()

我的理解是,行pool = ...产生子进程,它包含自己的父变量,直到父代码中的那一行为止。他们无法访问该行之后声明的全局变量。因此,预期1)中的AttributeError。子进程对f一无所知,因为它在父代码中被进一步声明。

然而,我确信我理解为什么2)有效。 pool.map同时使用fa。为什么儿童流程无法了解a,而他们需要了解f

0 个答案:

没有答案