Python中的多线程/进程处理

4

你好,我正在尝试使用多进程并行定义字典的值。当在“pool”外调用函数f()时,字典的值被正确设置。但是,在“pool”中调用时失败了。

我做错了什么?谢谢。

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']

在进程之间共享状态很困难。也许可以在子进程中执行复杂操作,并在父进程中维护“hits”的全局状态。 - Tim McNamara
1个回答

7
你会生成一堆子进程,这些进程会继承当前的hits值。每个子进程都有自己的hits副本并进行修改,然后退出,丢弃进程本地的hits副本。 multiprocessing.Pool.map()的预期用法是使用其返回值,但你忽略了它。每个进程可以返回它自己的hits副本,最后将这些副本合并。

我明白了,那么答案是: 从multiprocessing导入Poolhits={} def f(x): return x if name == 'main': pool = Pool(processes=2)
inputs = ['a','b','c'] result = pool.map(f, inputs) result=dict(zip(result,result))print result.items()
- David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接