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()是dictDictProxy
而不是实际的dict