问题是
thread_obj.start()立即返回。您产生的子线程在其自己的上下文中使用自己的堆栈执行。在那里发生的任何异常都在子线程的上下文中,并且在其自己的堆栈中。我现在想到的一种将此信息传达给父线程的方法是使用某种消息传递,因此您可能会对此进行研究。
尝试以下尺寸:
import sysimport threadingimport Queueclass 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: breakif __name__ == '__main__': main()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)