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中文网其他相关文章!