Heim > Artikel > Backend-Entwicklung > Wie fange ich untergeordnete Thread-Ausnahmen in einem übergeordneten Thread in Python ab?
In Python ermöglicht die Multithread-Programmierung die gleichzeitige Ausführung von Aufgaben. Allerdings kann die Ausnahmebehandlung in Multithread-Kontexten eine Herausforderung darstellen. Dieser Artikel befasst sich mit einem bestimmten Problem: dem Abfangen von Ausnahmen, die in einem untergeordneten Thread vom übergeordneten Thread auftreten.
Das Problem entsteht, weil der untergeordnete Thread unabhängig mit seinem eigenen Kontext und Stapel arbeitet. Im untergeordneten Thread ausgelöste Ausnahmen sind für den übergeordneten Thread nicht sofort sichtbar. Herkömmliche Try-Except-Blöcke im übergeordneten Thread, wie unten gezeigt, funktionieren nicht:
try: threadClass.start() ##### **Exception takes place here** except: print "Caught an exception"
Um dieses Problem zu beheben, können wir die Nachrichtenübermittlung nutzen. Der untergeordnete Thread kann mithilfe einer gemeinsamen Datenstruktur wie einer Warteschlange Ausnahmeinformationen an den übergeordneten Thread senden.
import sys import threading import queue class ExcThread(threading.Thread): def __init__(self, bucket): threading.Thread.__init__(self) self.bucket = bucket def run(self): try: raise Exception('An error occured here.') except Exception: self.bucket.put(sys.exc_info()) def main(): bucket = queue.Queue() thread_obj = ExcThread(bucket) thread_obj.start() while True: try: exc = bucket.get(block=False) except queue.Empty: pass else: exc_type, exc_obj, exc_trace = exc # deal with the exception print exc_type, exc_obj print exc_trace thread_obj.join(0.1) if thread_obj.isAlive(): continue else: break if __name__ == '__main__': main()
In diesem Beispiel:
Die Verwendung von Message Passing ermöglicht eine effiziente Kommunikation von Ausnahmen zwischen Threads.
Das obige ist der detaillierte Inhalt vonWie fange ich untergeordnete Thread-Ausnahmen in einem übergeordneten Thread in Python ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!