尝试从嵌套 Manager.dict 访问键值时出现 KeyError
KeyError when attempting to access a key value from a nested Manager.dict
我有一些多处理代码,我想在其中共享进程之间的嵌套字典。字典永远不会被进程修改;刚刚阅读。
最简单的形式,有问题的代码如下:
from multiprocessing import Manager
class MyClass(object):
def __init__(self):
self.manager = Manager()
self.delays = self.manager.dict({})
def foo(self, types, keys):
for type in types:
self.delays[type] = self.manager.dict({})
for key in keys:
self.delays[type][key] = 0
print("The delay is " + str(self.delays[type][key]))
我在打印语句中收到 KeyError
,它说我正在使用的密钥不存在。我不确定为什么会这样,因为我刚刚将密钥插入到字典中。当我将其更改为常规字典时,问题就消失了。
基于这个 answer 到一个相关问题,您可以使用 Manager.list
附加字典,然后使用对字典的引用:
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]))
我有一些多处理代码,我想在其中共享进程之间的嵌套字典。字典永远不会被进程修改;刚刚阅读。
最简单的形式,有问题的代码如下:
from multiprocessing import Manager
class MyClass(object):
def __init__(self):
self.manager = Manager()
self.delays = self.manager.dict({})
def foo(self, types, keys):
for type in types:
self.delays[type] = self.manager.dict({})
for key in keys:
self.delays[type][key] = 0
print("The delay is " + str(self.delays[type][key]))
我在打印语句中收到 KeyError
,它说我正在使用的密钥不存在。我不确定为什么会这样,因为我刚刚将密钥插入到字典中。当我将其更改为常规字典时,问题就消失了。
基于这个 answer 到一个相关问题,您可以使用 Manager.list
附加字典,然后使用对字典的引用:
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]))