包含值列表的Python multiprocessing.Manager字典

问题描述:

我在进程之间共享字典,每个进程在dict中插入一个条目,其中字典中的键值可以是列表或gdb.Value实例。 每个进程正在做这样的事情包含值列表的Python multiprocessing.Manager字典

mydict["key"] = [[2], gdb.Value(someaddress), 3, 4] 

当上述行执行我得到下面的错误,看起来像它,因为我将gdb.Value,这个工作如果在一个对象()实例

的情况下,
Traceback (most recent call last): 
    File "/test.py", line 631, in insert 
    mydict["key"] = [[2], 1, 3, 4] 
    File "<string>", line 2, in __setitem__ 
    File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod 
    raise convert_to_error(kind, result) 
RemoteError: 
--------------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/multiprocessing/managers.py", line 240, in serve_client 
    request = recv() 
TypeError: Value object creation takes only 1 argument 

我看到另一个问题也一样,遍历该字典给我下面的错误

Traceback (most recent call last): 
    File "/test.py", line 1214, in <module> 
    for item in mydict: 
    File "<string>", line 2, in __getitem__ 
    File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod 
    raise convert_to_error(kind, result) 
+0

我怎么固定的转变gdb.Value到Python INT /长和存储它代替 – PMat

请张贴一个失败的自包含的例子。这里有一个在从你写的猜我最好的尝试,但它工作正常:

import multiprocessing as mp 

def e(tag, d): 
    d[tag] = [[tag], tag, tag, tag] 

if __name__ == '__main__': 
    d = mp.Manager().dict() 
    ps = [] 
    for i in range(4): 
     ps.append(mp.Process(target=e, args=(str(i), d))) 
     ps[-1].start() 
    for p in ps: 
     p.join() 
    print(d) 

而且它打印:

{'0': [['0'], '0', '0', '0'], 
'1': [['1'], '1', '1', '1'], 
'2': [['2'], '2', '2', '2'], 
'3': [['3'], '3', '3', '3']} 
+0

感谢您的快速回复。我意识到这是特定于我的用例。我将对象实例插入到列表中,即使在object()的情况下也是如此。但我插入一个gdb.Value()。循环字典时也有错误。请参阅更新后的问题 – PMat

+0

在你的例子中,如果我在d上循环,它会抛出错误。请参阅最新的问题 – PMat