Thread-Ausnahmen in Python-Multithreading abfangen
In Python ermöglicht Multithreading die gleichzeitige Ausführung mehrerer Aufgaben. Die Behandlung von Ausnahmen innerhalb eines untergeordneten Threads stellt jedoch eine Herausforderung dar, da die Ausnahme in einem separaten Kontext auftritt.
Problem erklärt
Wenn ein untergeordneter Thread eine Ausnahme auslöst, ist dies nicht der Fall direkt im übergeordneten Thread abgefangen. Die Methode thread_obj.start() kehrt sofort zurück, während der untergeordnete Thread unabhängig arbeitet.
Lösung mit Queue und sys.exc_info()
Um die Ausnahmeinformationen zurückzumelden Zum übergeordneten Thread können wir eine Warteschlange für die Nachrichtenübermittlung verwenden. Hier ist ein Beispiel:
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()
Erklärung:
Dieser Ansatz ermöglicht es dem übergeordneten Thread, Ausnahmen vom untergeordneten Thread zu verarbeiten effektiv einfädeln.
Das obige ist der detaillierte Inhalt vonWie fängt man Ausnahmen von untergeordneten Threads im Python-Multithreading ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!