Détection des exceptions de thread dans le multithreading Python
En Python, le multithreading permet l'exécution simultanée de plusieurs tâches. Cependant, la gestion des exceptions au sein d'un thread enfant pose des problèmes, car l'exception se produit dans un contexte distinct.
Problème expliqué
Lorsqu'un thread enfant lève une exception, ce n'est pas le cas. directement pris dans le fil parent. La méthode thread_obj.start() renvoie immédiatement, tandis que le thread enfant fonctionne indépendamment.
Solution utilisant Queue et sys.exc_info()
Pour communiquer les informations d'exception en retour au thread parent, nous pouvons utiliser une file d'attente pour le passage des messages. Voici un exemple :
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()
Explication :
Cette approche permet au thread parent de gérer les exceptions de l'enfant enfiler efficacement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!