Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pool.map()时的全局字典python_Python_Dictionary - Fatal编程技术网

使用pool.map()时的全局字典python

使用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'} 换句话说,使字典全球化。 我应该如何修复它?您可以在进程块函数的开头添加全局字典,但使用全局字典不是一种好的做法。您最好将其传递到函数调用中,或者创建一个类并将其作为私有成员。为什么不返

当我调用函数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)