【发布时间】:2016-06-03 20:39:30
【问题描述】:
我正在尝试在 multiprocessing.Pool 的线程之间共享字典。但是,我对当前的实施失败了。测试代码:
#!/usr/bin/env python
import multiprocessing
success_map = {"1": []}
def run_(input):
global success_map
successes = success_map.get(input);
successes.append(0)
print success_map
pool = multiprocessing.Pool()
pool.map(run_, ["1"])
pool.close()
pool.join()
print success_map
输出是
{'1': [0]}
{'1': []}
在我看来,multiprocessing.Pool() 的工作人员创建了字典的副本;这就是为什么处理完成后我看不到更新。我说的对吗?
注意:
- 我知道可以从
run_函数返回值并作为pool.map(run_, ["1"])的结果获取收集的列表,但需要对当前任务使用全局变量 - 我知道可能的数据竞争
- 我在某处读到
global语句在这种情况下不需要,但示例在没有它的情况下工作方式相同 - 我通过
[["1", success_map]]到pool.map得到了相同的结果;不使用全局变量
在这个例子中,是否可以在线程之间共享success_map?
【问题讨论】:
标签: python python-2.7 multiprocessing