Python multiprocessing mit pathos
Ich bin versucht, Python-pathos zu benennen, die Berechnungen in separaten Prozessen, um dies zu beschleunigen, mit multicore-Prozessor. Mein code ist folgendermaßen organisiert:
class:
def foo(self,name):
...
setattr(self,name,something)
...
def boo(self):
for name in list:
self.foo(name)
Als hatte ich Beizen Probleme mit multiprocessing.Pool, habe ich beschlossen, zu versuchen pathos.
Ich habe versucht, wie bereits in vorherigen Themen:
import pathos.multiprocessing
aber es hat zu Fehler geführt: Kein Modul multiprocessing - ich kann nicht finden, im neuesten pathos version.
Dann habe ich versucht zu ändern boo-Methode:
def boo(self):
import pathos
pathos.pp_map.pp_map(self.foo,list)
Nun ist es kein Fehler geworfen, aber foo nicht funktioniert - Instanz meiner Klasse hat keine neuen Attribute. Bitte helfen Sie mir, denn ich habe keine Ahnung, wo sich zu bewegen weiter, nach einem Tag ausgegeben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin der
pathos
Autor. Ich bin mir nicht sicher, was Sie tun möchten, aus dem code oben.Allerdings kann ich vielleicht etwas Licht. Hier einige ähnliche code:
So was passiert, vor, ist, dass die
boo
Methode derBar
Instanzb
aufgerufen, wob.boo
übergeben wird, eine neue python-Prozess und anschließend ausgewertet, für jede der geschachtelten Listen. Sie können sehen, dass die Ergebnisse richtig sind... len("12")+len("3")+len("456") ist 6, und so weiter.Aber Sie können auch sehen, dass wenn man sich
b.sum
es auf mysteriöse Weise immer noch0
. Warum istb.sum
noch null? Naja, wasmultiprocessing
(und damit auchpathos.multiprocessing
) tut, ist eine KOPIEREN, was Sie Durchlaufen die Karte, um die anderen python-Prozess... und dann die kopierte Instanz wird dann als (parallel) und zurück, was auch immer Ergebnisse genannt werden, die von der Methode aufgerufen wird. Hinweis: Sie müssen ZURÜCK Ergebnisse oder drucken Sie Sie, oder melden Sie Sie, oder senden Sie eine Datei oder sonst. Sie können nicht zurück auf die ursprüngliche Instanz als man erwarten könnte, denn es ist nicht der original-Instanz, die geschickt über zu den anderen Prozessoren. Die Kopien der Instanz erstellt, die dann entsorgt werden-jede von Ihnen hatte Ihresum
Attribut erhöht, aber das original `b.Summe' ist unberührt.Gibt es jedoch, die Pläne innerhalb von
pathos
etwas zu machen, wie die oben genannten arbeiten, wie man erwarten könnte-wo das ursprüngliche Objekt IST aktualisiert, aber es funktioniert so nicht, dass noch.EDIT: Wenn Sie die Installation mit
pip
beachten Sie, dass die Letzte veröffentlichte version vonpathos
ist mehrere Jahre alt und wird möglicherweise nicht ordnungsgemäß installiert oder kann nicht installieren Sie alle Submodule. Eine neuepathos
release ansteht, aber bis dahin, ist es besser, die neueste version des code von github, und von dort installieren. Der Rumpf ist zum größten Teil stabil in der Entwicklung. Ich denke, dein Problem könnte gewesen sein, dass nicht alle Pakete installiert wurden, durch eine "neue"pip
-- "alten"pathos
Inkompatibilität in der Installation. Wennpathos.multiprocessing
fehlt, ist dies die wahrscheinlichste Ursache.Bekommen
pathos
von github hier: https://github.com/uqfoundation/pathosimport pathos
, aberimport pathos.multiprocessing
gibt mir ein Modul nicht gefunden " - Fehler. Was könnte der Grund für das?import processing
? Wie wärefrom processing.pool import Pool
? Wie wärefrom pathos.helpers import mp_helper
oderfrom pathos.helpers import ProcessPool
? Wasimport pp
undfrom pathos.helpers import pp_helper
?from pathos.helpers import *
gibt "Kein Modul namens Helfer". Irgendwie werden nicht alle von pathos für mich verfügbar ist, und es scheint, OP. Ich habe es installiert von pip, es ist die neueste version.pathos
in ein paar mehr Pakete (im Grunde alle die nicht-Standard-Abhängigkeiten), um sicherzustellen, dass alles istpip
installierbar. Neue Versionen sollten bald kommen.pip
installierbar und wurde für eine Weile.ProcessingPool
verwendetmultiprocess
undParallelPool
verwendetppft
. Das erstere ist für die Prozess-parallel-computing, während die letzteren verwendet werden können, über ein Netzwerk ein.