Heim >Backend-Entwicklung >Python-Tutorial >Wie fängt man Ausnahmen von untergeordneten Threads im Python-Multithreading ab?

Wie fängt man Ausnahmen von untergeordneten Threads im Python-Multithreading ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-22 10:49:11885Durchsuche

How to Catch Exceptions from Child Threads in Python Multithreading?

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:

  1. Der untergeordnete Thread (ExcThread) löst eine Ausnahme aus.
  2. Innerhalb der „run“-Methode des untergeordneten Threads wird die Ausnahmeinformationen werden mit sys.exc_info() in eine Warteschlange gestellt.
  3. Im übergeordneten Thread (Hauptthread) eine Schleife Überprüft die Warteschlange kontinuierlich auf Ausnahmen.
  4. Wenn eine Ausnahme in der Schleife gefangen wird, wird sie zur Prüfung ausgedruckt.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn