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

Patricia Arquette
Freigeben: 2024-11-22 10:49:11
Original
786 Leute haben es durchsucht

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()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage