Python 멀티스레딩에서 스레드 예외 잡기
Python에서 멀티스레딩을 사용하면 여러 작업을 동시에 실행할 수 있습니다. 그러나 하위 스레드 내에서 예외를 처리하는 것은 예외가 별도의 컨텍스트에서 발생하기 때문에 문제가 됩니다.
문제 설명
하위 스레드에서 예외가 발생하는 경우에는 그렇지 않습니다. 상위 스레드에 직접 걸렸습니다. thread_obj.start() 메서드는 즉시 반환하고 하위 스레드는 독립적으로 작동합니다.
큐와 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!