Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 호출자 스레드에서 스레드의 예외를 잡는 방법은 무엇입니까?

<시간/>

문제는 thread_obj.start()가 즉시 반환된다는 것입니다. 시작한 자식 스레드는 자체 스택의 자체 컨텍스트에서 실행됩니다. 발생하는 모든 예외는 자식 스레드의 컨텍스트에서 발생합니다. 메시지를 전달하여 이 정보를 상위 스레드에 전달해야 합니다.

코드는 다음과 같이 다시 작성할 수 있습니다.

import sys
import threading
import Queue
class ExcThread(threading.Thread):
def __init__(self, foo):
threading.Thread.__init__(self)
self.foo = foo
def run(self):
try:
raise Exception('An error occurred here.')
except Exception:
self.foo.put(sys.exc_info())
def main():
foo = Queue.Queue()
thread_obj = ExcThread(foo)
thread_obj.start()
while True:
try:
exc = foo.get(block=False)
except Queue.Empty:
pass
else:
exc_type, exc_obj, exc_trace = exc
print exc_type, exc_obj
print exc_trace
thread_obj.join(0.1)
if thread_obj.isAlive():
continue