-2

Dies ist der Hauptcode.Wert speichert nicht in Manager() dict() in dem Pool()

if __name__ == '__main__': 
    manager = Manager() 
    mylist = manager.list() 
    mydict = manager.dict() 

    mylist.append('abc') 
    mylist.append('xyz') 

    for k in mylist: 
     mydict[k] = manager.list() 

    pool = Pool(processes = 100) 
    pool.map(func, arg) 
    pool.terminate() 

Dies ist die func() Definition:

for x in mylist: 
    r = {} 
    r['m'] = 1 
    r['n'] = 2 
    print (r) # gives correct values 
    mydict[x].append(dict(r)) 
    print (mydict) # gives empty list, keys are printed correct 

Wie kommentiert Im Code wird anstelle der erwarteten Werte eine leere Liste gedruckt. Wie kann ich dieses geteilte Dict und die Liste ordnungsgemäß funktionieren lassen?

Der erste Druck zeigt die erwarteten Werte. Der zweite Druck zeigt die erwarteten Schlüssel, aber der Wertteil ist eine leere Liste. Da die Schlüssel korrekt angezeigt werden, funktioniert die Freigabe. Es gibt ein Problem mit dem Append-Teil. Ich kann es nicht herausfinden.

Down-Wähler, bitte lesen Sie die verknüpfte Frage sorgfältig, bevor Sie davon ausgehen, dass meine Frage dieselbe wie diese ist. Wenn Sie immer noch darauf bestehen, dass sie gleich sind, hinterlassen Sie bitte einen Kommentar, warum Sie das denken. Aus meiner Sicht sind beide Fragen unterschiedlich. Mit der verknüpften Frage wird gefragt, wie ein Dict mit Antworten geteilt wird, die die Verwendung von Manager.dict() vorschlagen. Meine Frage verwendet bereits Manager.dict() und schlägt aufgrund einer Anomalie fehl. Vielen Dank.

+0

Möchten Sie "Meine Liste" in allen Managerinstanzen freigeben? –

+0

[Bearbeiten] Sie Ihre Frage und zeigen Sie den Funktionskopf von 'func (???', oder verwenden Sie 'mylist' als Global? – stovfl

+0

@pdshah Es soll nur eine Instanz von mydict und eine Instanz von mylist geben ganzes Programm Beide sind global Alle Daten innerhalb von mydict müssen sichtbar und modifizierbar sein von myfunc(). Ich verstehe nicht, was Sie mit "alle Manager-Instanzen" meinen. Erstelle ich mehr Instanzen innerhalb des Pools? Das ist nicht beabsichtigt. Hilfe Ich repariere es. – aste123

Antwort

0

Wie aus den Kommentaren im Code ersichtlich ist, wird mydict innerhalb von func() korrekt gelesen, aber nicht mutiert. Das Objekt Manger.dict() kann verschachtelte Teile nicht mutieren.

Es kann behoben werden, indem Sie ein neues Wörterbuch erstellen und mydict darauf nach der Mutation zeigen.

for x in mylist: 
    r = {} 
    r['m'] = 1 
    r['n'] = 2 
    print (r) 
    foo = mydict[x] 
    foo.append(dict(r)) 
    mydict[x] = foo 
    print (mydict) 
Verwandte Themen