Python-Multiprocessing mit Pathos

9

Ich versuche Pythons Pathos zu verwenden, um Berechnungen in separate Prozesse zu setzen, um sie mit Multicore-Prozessor zu beschleunigen. Mein Code ist wie folgt organisiert:

%Vor%

Da ich Probleme mit dem Multiprocessing hatte, entschied ich mich für Pathos. Ich habe versucht, wie in früheren Themen vorgeschlagen:

%Vor%

aber es führte zu einem Fehler: Kein Modul-Multiprocessing - was ich in der neuesten Pathos-Version nicht finden kann.

Dann habe ich versucht, die boo-Methode zu ändern:

%Vor%

Jetzt wird kein Fehler ausgelöst, aber foo funktioniert nicht - Instanz meiner Klasse hat keine neuen Attribute. Bitte hilf mir, denn ich habe keine Ahnung, wohin ich als nächstes gehen soll, nachdem ich einen Tag damit verbracht habe.

    
user3708829 26.09.2014, 12:37
quelle

1 Antwort

19

Ich bin der pathos -Autor. Ich bin mir nicht sicher, was Sie von Ihrem Code oben tun möchten. Allerdings kann ich vielleicht etwas Licht werfen. Hier ist ein ähnlicher Code:

%Vor%

Was oben passiert, ist also, dass die Methode boo der Bar instanz b aufgerufen wird, wobei b.boo an einen neuen Python-Prozess übergeben und dann für jede verschachtelte Liste ausgewertet wird. Sie können sehen, dass die Ergebnisse korrekt sind ... len ("12") + len ("3") + len ("456") ist 6, und so weiter.

Sie können jedoch auch sehen, dass, wenn Sie b.sum betrachten, es geheimnisvoll immer noch 0 ist. Warum ist b.sum immer noch Null? Nun, was multiprocessing (und somit auch pathos.multiprocessing ) tut, ist ein COPY von allem, was Sie durch die Karte zum anderen Python-Prozess ... passieren und dann wird die kopierte Instanz dann aufgerufen (in parallel) und gibt alle Ergebnisse zurück, die von der aufgerufenen Methode aufgerufen werden. Beachten Sie, dass Sie RETURN Ergebnisse haben müssen, oder drucken Sie sie aus, oder protokollieren Sie sie oder senden Sie sie an eine Datei oder auf andere Weise. Sie können nicht wie erwartet zur ursprünglichen Instanz zurückkehren, da nicht die ursprüngliche Instanz an die anderen Prozessoren gesendet wird. Die Kopien der Instanz werden erstellt und dann entsorgt - für jede von ihnen wurde das sum -Attribut erhöht, aber das Original "B.sum" ist unberührt.

Es gibt jedoch Pläne innerhalb von pathos , so etwas wie oben beschrieben zu erstellen, wie Sie es vielleicht erwarten - wo das ursprüngliche Objekt IS aktualisiert wurde, aber noch nicht so funktioniert.

BEARBEITEN: Wenn Sie mit pip installieren, beachten Sie, dass die neueste veröffentlichte Version von pathos mehrere Jahre alt ist und möglicherweise nicht richtig installiert wird oder nicht alle Submodule installiert . Eine neue pathos Version ist ausstehend, aber bis dahin ist es besser, die neueste Version des Codes von github zu bekommen und von dort zu installieren. Der Stamm ist in der Entwicklung größtenteils stabil. Ich denke, Ihr Problem könnte sein, dass nicht alle Pakete installiert wurden, aufgrund einer "neuen" pip - "alten" pathos Inkompatibilität in der Installation. Wenn pathos.multiprocessing fehlt, ist dies der wahrscheinlichste Täter.

Erhalte pathos von github hier: Ссылка

    
Mike McKerns 28.10.2014 22:16
quelle