包含值列表的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)
答
请张贴一个失败的自包含的例子。这里有一个在从你写的猜我最好的尝试,但它工作正常:
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']}
我怎么固定的转变gdb.Value到Python INT /长和存储它代替 – PMat