Ausnahmen von einem untergeordneten Thread im Hauptthread abfangen
Bei der Arbeit mit Multithread-Programmierung ist es wichtig, Ausnahmen angemessen zu behandeln. Im Fall von Python tritt ein häufiges Problem auf, wenn versucht wird, Ausnahmen abzufangen, die in einem untergeordneten Thread im Hauptthread ausgelöst werden.
Verstehen des Problems
Der Code lieferte Versuche um Ausnahmen in einem untergeordneten Thread innerhalb des Try-Exception-Blocks im Hauptthread zu behandeln. Dieser Ansatz schlägt jedoch fehl, da die Methode thread_obj.start() sofort in ihrem eigenen Kontext und Stapel ausgeführt wird. Alle im untergeordneten Thread ausgelösten Ausnahmen befinden sich in ihrem eigenen Kontext, was es schwierig macht, sie direkt im Hauptthread abzufangen.
Message-Passing-Technik
Eine mögliche Lösung für Dieses Problem besteht darin, einen Mechanismus zur Nachrichtenübermittlung zwischen dem untergeordneten Thread und dem Hauptthread einzusetzen. Dieser Ansatz ermöglicht es dem untergeordneten Thread, Ausnahmen an den Hauptthread zurückzumelden.
Code-Implementierung
Der folgende Code zeigt, wie diese Nachrichtenübermittlungstechnik mithilfe einer Warteschlange implementiert wird:
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 Code:
Durch die Verwendung dieser Methode können im untergeordneten Thread ausgelöste Ausnahmen effektiv kommuniziert und im Hauptthread behandelt werden, was eine ordnungsgemäße Ausnahmeverwaltung in Multithread-Anwendungen ermöglicht.
Das obige ist der detaillierte Inhalt vonWie fängt man Ausnahmen von einem untergeordneten Thread im Hauptthread ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!