Wie fangen Sie die Ausnahmen bei Arbeitern in Multiprocessing
Arbeite ich mit dem multiprocessing-Modul in Python (2.7.3) und Debuggen möchten, einige Dinge in meine Arbeiter. Aber ich scheine nicht in der Lage sein, um alle Ausnahmen abzufangen, die in den worker-threads.
Einem minimal-Beispiel:
import multiprocessing as mp
a=[1]
def worker():
print a[2]
def pool():
pool = mp.Pool(processes=1)
pool.apply_async(worker, args = ())
pool.close()
pool.join()
print "Multiprocessing done!"
if __name__ == '__main__':
pool()
Dies wird voraussichtlich zu erhöhen, wird ein IndexError, aber meine Ausgabe ist nur
Multiprocessing done!
Gibt es eine Möglichkeit, mir zu zeigen, alle auftretenden Ausnahmen in der worker-threads ohne manuell anheben meiner eigenen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird der Fehler nicht ausgelöst, es sei denn, Sie rufen
get
Methode vonAsyncResult
(der Rückgabewert derapply_async
):Entsprechend der
AsyncResult.get
- Dokumentation:result.get()
würde der block-code, bis der Prozess abgeschlossen ist, wie zu entkommen, dass?Ich denke falsetru gab Ihnen, was Sie brauchen. Ich möchte nur erweitern ein wenig mehr.
Wenn es wichtig für Sie, um nicht nur die Fehler, sondern der ursprüngliche Kontext (d.h. zu wissen, dass die Ausnahme auf der Linie 1 von worker()) können Sie prüfen, diese schöne post von Ned Batchelder die erklärt, wie zu reraisen, Ausnahmen mit Ihrem ursprünglichen Kontext.
Dass nicht für mp.Pool es ist also nur für den Fall, Sie brauchen etwas mehr. Diese Frage ALSO deckt Ihre Frage über mehr explizite multiprocessing-Techniken anstelle von mp.Pool.