2017-06-21 141 views
1

我在進程之間共享字典,每個進程在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

回答

0

請張貼一個失敗的自包含的例子。這裏有一個在從你寫的猜我最好的嘗試,但它工作正常:

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

相關問題