使用pool.map()时的全局字典python
当我调用函数process_chunk(d)时,变量“dictionary”将变为空。我想将所有结果放入字典: 假设我每次都得到结果: 字典={0:a',1:b',2:c'} 字典={0:a',1:d'} 字典={0:e',1:f'} 我想去 字典={0:a',1:b',2:c',3:d',4:e',5:f'} 换句话说,使字典全球化。使用pool.map()时的全局字典python,python,dictionary,Python,Dictionary,当我调用函数process_chunk(d)时,变量“dictionary”将变为空。我想将所有结果放入字典: 假设我每次都得到结果: 字典={0:a',1:b',2:c'} 字典={0:a',1:d'} 字典={0:e',1:f'} 我想去 字典={0:a',1:b',2:c',3:d',4:e',5:f'} 换句话说,使字典全球化。 我应该如何修复它?您可以在进程块函数的开头添加全局字典,但使用全局字典不是一种好的做法。您最好将其传递到函数调用中,或者创建一个类并将其作为私有成员。为什么不返
我应该如何修复它?您可以在
进程块
函数的开头添加全局字典
,但使用全局字典不是一种好的做法。您最好将其传递到函数调用中,或者创建一个类并将其作为私有成员。为什么不返回值(而不是将其放入字典中),然后在p.map
完成后构建字典?多处理不能很好地处理全局数据,因为每个进程都有自己的数据副本。如果您确实希望在进程之间共享数据,则需要使用管理器
,但这可能会减少使用多进程所获得的一些收益,因为您需要花时间在进程之间进行通信。谢谢!我试图将dictionary传递给process\u chunk函数:process\u chunk(d,dictionary)results=p.map(functools.partial(process\u chunk,dictionary\u list),chunk)但是,变量d是空的,而chunk不是空的?为什么会发生这种情况?你能提供一个更完整的例子吗?如何使用全局变量?你确定你真的在里面插东西吗?确保您有这样一条语句:global dictionary
在process\u chunk(d)
def process_chunk(d):
if (d):
d = d.split(" ")
for value in d:
if value not in dictionary.values():
dictionary[len(dictionary)] = value
print(dictionary)
return 1
def grouper(n, iterable, padvalue=None):
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
dictionary = {}
if __name__ == "__main__":
test_data = open('testfile.txt').read()
test_data = test_data.split("\n")
p = multiprocessing.Pool(4)
for chunk in grouper(2, test_data):
results = p.map(process_chunk, chunk)