Seite 1 von 1

Eine Exception eines Child Thread im Main Thread abfangen

Verfasst: Freitag 22. Februar 2013, 18:27
von Nebelhom
Servus,

wie der Titel es schon andeutet, würde mich interessieren, wie man am Besten eine Exception eines Child Thread im Main Thread abfangen kann. Ich habe mal versucht ein wirkliches Minimalbeispiel zu kredenzen, um es zu veranschaulichen.

Wie ihr unten seht, würde ich gerne irgendwie in 'main()' die Exception registrieren lassen. Aktuell bringt der try/except Block gar nichts und es wird eine Exception geworfen (Traceback siehe unten). Gibt es eine allgemein anerkannte Lösung für so ein Problem?

Danke schonmal für eure Hilfe und Anregungen.

Code: Alles auswählen

import time
from threading import Thread

def faulty_worker():
    time.sleep(1)
    raise Exception
    
def main():
    try:
        t = Thread(target=faulty_worker).start()
    except:
        print "Huzzah!"


if __name__ == '__main__':
    main()
Hier noch der Traceback des obigen Beispiels:

Code: Alles auswählen

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/nebelhom/SpyderWorkspace/pydf-chain/sandbox.py", line 50, in faulty_worker
    raise Exception
Exception

Re: Eine Exception eines Child Thread im Main Thread abfange

Verfasst: Freitag 22. Februar 2013, 18:42
von Sirius3
Hallo Nebelhorn,

Threads sind ja gerade dazu da, dass sie nebeneinander herlaufen, dass also das Hauptprogramm nichts vom Thread mitkriegt. Wo soll also die Exception abgefangen werden, wenn das Hauptprogramm inzwischen an einer beliebigen Stelle sein kann?

Der normale Weg ist, die Exception im Thread abzufangen und entsprechend zu behandeln. Informationen über die erfolgreiche Abarbeitung eines Threads kann über Queues zum Hauptprogramm übermittelt werden.