Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 试图从嵌套的Manager.dict访问键值时出现KeyError_Python_Python 3.x_Dictionary_Multiprocessing - Fatal编程技术网

Python 试图从嵌套的Manager.dict访问键值时出现KeyError

Python 试图从嵌套的Manager.dict访问键值时出现KeyError,python,python-3.x,dictionary,multiprocessing,Python,Python 3.x,Dictionary,Multiprocessing,我有一些多处理代码,我想在进程之间共享一个嵌套字典。字典从不被过程修改;读吧 以最简单的形式,问题代码如下所示: 来自多处理导入管理器的 类MyClass(对象): 定义初始化(自): self.manager=manager() self.delays=self.manager.dict({}) def foo(自身、类型、键): 对于输入类型: self.delays[type]=self.manager.dict({}) 对于键入键: self.delays[type][key]=0 打印

我有一些多处理代码,我想在进程之间共享一个嵌套字典。字典从不被过程修改;读吧

以最简单的形式,问题代码如下所示:

来自多处理导入管理器的

类MyClass(对象):
定义初始化(自):
self.manager=manager()
self.delays=self.manager.dict({})
def foo(自身、类型、键):
对于输入类型:
self.delays[type]=self.manager.dict({})
对于键入键:
self.delays[type][key]=0
打印(“延迟为”+str(self.delays[type][key]))
我在print语句中得到一个
KeyError
,它说我正在使用的密钥不存在。我不知道为什么会发生这种情况,因为我刚刚将密钥插入了dict。当我将其更改为常规dict时,问题就消失了。

基于此,您可以使用
管理器。列出
附加dict,然后使用对该dict的引用:

from multiprocessing import Manager
class MyClass(object):

    def __init__(self):
        self.manager = Manager()
        self.l = self.manager.list()
        self.l.append({})
        self.delays = self.l[0]

    def foo(self, types, keys):
        for type in types:
            self.delays[type] = self.manager.dict()
            for key in keys:
                self.delays[type].setdefault(key, 0)
                print("The delay is {}".format(self.delays[type][key]))

是否可以发布
Manager
课程的相关部分?e、 g.
Manager.dict()
和普通的老Python dict有什么区别?
Manager
来自模块。获取并编辑了它,以防其他人遇到相同的问题:)这似乎是一个已知的问题:Manager.dict()是dict
DictProxy
而不是实际的dict