2017-06-21 4 views
1

Ich bin ein Wörterbuch zwischen Prozessen teilen und jeder Prozess fügt einen Eintrag in das dict, wobei der Wert für die Schlüssel im Wörterbuch eine Liste oder eine gdb.Value-Instanz sein kann. Jedes Verfahren ist so etwas wie diesesPython multiprocessing.Manager dict enthält Wert eine Liste

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

tun Wenn die obige Zeile ausgeführt wird ich den unten Fehlermeldung erhalten, sieht aus wie seine weil ich gdb.Value bin Einfügen funktioniert dies, wenn im Falle eines Objekts() Instanz

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 

ich sehe ein anderes Problem auch über die dict Looping gibt mir unter Fehler

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

, wie ich wurde behoben gdb.Value zu Python int umgewandelt/lang und gespeichert es stattdessen – PMat

Antwort

0

Bitte senden Sie uns eine in sich geschlossene Beispiel, das ausfällt. Hier ist mein bester Versuch, ein von zu erraten, was Sie schrieb, aber es funktioniert gut:

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) 

Und es druckt:

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

Vielen Dank für die schnelle Antwort. Ich habe festgestellt, dass dies für meinen Anwendungsfall spezifisch ist. Ich füge Objektinstanz in die Liste ein, auch im Falle von object() funktioniert es. Aber ich füge ein gdb.Value() ein. Es gibt auch einen Fehler beim Schleifen des Diktats. Bitte sehen Sie die aktualisierte Frage – PMat

+0

In Ihrem Beispiel, wenn ich über d Schleife, wirft es mich den Fehler. Bitte sehen Sie sich die aktualisierte Frage an – PMat

Verwandte Themen