Python 多執行緒中擷取執行緒異常
在 Python 中,多執行緒允許並發執行多個任務。然而,處理子執行緒中的異常會帶來挑戰,因為異常發生在單獨的上下文中。
問題解釋
當子執行緒拋出異常時,它不是直接捕捉到父執行緒。 thread_obj.start() 方法立即返回,而子執行緒獨立運行。
使用 Queue 和 sys.exc_info() 的解決方案
將異常訊息傳回父線程,我們可以使用佇列來進行訊息傳遞。以下是範例:
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()
說明:
這種方法允許父級執行緒有效地處理子執行緒的例外狀況。
以上是如何在Python多執行緒中捕捉子執行緒的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!