2011-10-25 94 views
4

您好我正在尝试使用多处理并行定义字典的值。当函数f()在“pool”之外被调用时,字典值被正确设置。然而在池调用中,它失败了。Python中的多线程/处理

我在做什么错?谢谢。

from multiprocessing import Pool 

hits={} 
def f(x): 
    hits[x] = x #this will involve a complex operation 

f('000') 
print hits['000'] 

if __name__ == '__main__': 
    pool = Pool(processes=2)    
    inputs = ['a','b','c'] 
    result = pool.map(f, inputs) 
print hits['a'] 
+0

进程之间共享状态很困难。也许在子进程中执行复杂的操作并在父进程中维护'命中'的全局状态。 –

回答

7

您生成了一堆继承当前值hits的子进程。每个子进程都获得自己的副本hits并对其进行修改,然后退出,删除hits的进程本地副本。

multiprocessing.Pool.map()的预期用途是使用它的返回值,这是你忽略的。每个进程都可以返回hits的副本,并最终加入这些副本。

+0

我看到,则回答是:从多处理进口普尔 命中= {} DEF F(X): 返回X 如果__name__ == '__main__': 池=普尔(进程= 2) 输入= ['a','b','c'] result = pool.map(f,inputs) result = dict(zip(result,result)) print result.items – David