Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
python中dict中的多处理搜索_Python_Dictionary_Parallel Processing - Fatal编程技术网

python中dict中的多处理搜索

python中dict中的多处理搜索,python,dictionary,parallel-processing,Python,Dictionary,Parallel Processing,我有一个巨大的dict在里面添加数据。我试图搜索dict中是否已经存在一个键,但随着字典的增长,这需要很长时间。如何在多处理器系统中并行执行此搜索 def __getVal(self, key, val): ret= 0 if key in self.mydict: ret= val + self.mydict[key] else: ret = val return ret 可

我有一个巨大的dict在里面添加数据。我试图搜索dict中是否已经存在一个键,但随着字典的增长,这需要很长时间。如何在多处理器系统中并行执行此搜索

 def __getVal(self, key, val):
        ret= 0
        if key in self.mydict:
            ret= val +  self.mydict[key]
        else:
            ret = val
        return  ret

可能在尝试在多进程中拆分之前,您应该尝试以下操作:

不要看钥匙是否在字典里,而是在try…catch块中访问它

在我的各种各样的电脑上,它比查找键列表快得多

因此,您的最终代码如下所示:

try:
    ret = val +  self.mydict[key]
catch:
    ret = val
只需使用默认值为0的.get即可

 return self.mydict.get(key, 0)  + val

使用ret=0并将其添加到字典中是没有意义的,只需如上所述返回即可。

问题在于Nick Bastin如何说,这不是搜索速度,而是在继续添加元素时使字典变大的成本

成本是由为新项目创建的hashmap引起的。由于hashmap是一个短冲突,因此需要插入其他进程

一种解决方案是重新编译Hashmap,使Hashmap更大


在这种情况下,更改列表就足够了,这样就不会增加冲突带来的不便。

在字典中查找内容应该是一个O1操作,除非您有很多冲突。字典里有多少词条?问:什么是勇气?为什么返回ti而不是ret?几乎可以肯定,你的问题不是搜索速度,但是,随着您继续添加元素,使字典变大的成本。请在优化之前对代码进行分析。return changed valor for ret中有一个输入错误。dict的输入速度变慢,有9000万个条目。这个问题可能会有所帮助: