안녕하세요, 저는 Python과 멀티 스레드 프로그래밍을 처음 사용합니다. 몇 가지 테스트 단계를 거치는 스크립트가 있습니다. 한편이 실행되고있는 간격으로 폴링하고 모든 프로세스가 실행 중에 충돌이 있는지 읽는 스레드를 만들고 싶습니다. 나는이 정보를 얻는 함수를 가지고있다. 내 문제는 그 스레드가 예외가 발생할 때마다 나는 그 프로세스가 추락했다는 것이다. 현재 스레드는 다음과 같습니다.파이썬의 메인 스레드에서 스레드의 예외를 잡습니다.
class process_thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.run_thread = True
def run(self):
while self.run_thread:
if has_any_processes_crashed() == -1:
self.run_thread = False
raise MyStopException("A process has crashed") # This is the problematic line. It is only raised in this thread, not in main thread.
else:
time.sleep(3)
그러나 예외는 해당 스레드에서만 발생하며 주 스레드에서는 발생하지 않습니다. 나는 거기에서 같은 예외를 던지고 스크립트를 종료하고 싶다. 이 스레드로 수행하는 작업은 모든 테스트 단계로 시작하여 데몬 스레드로 설정하기 전에 개체를 만드는 것입니다. 내 테스트 단계가 완료되면 시뮬레이션을 종료하기 전에이 스레드를 종료하고 싶습니다. 나는 여전히 메인 스레드에서 내 테스트 단계를 실행하기 위해 필요로하는 대기열 내 시나리오에서 가능하다고 생각하지 않는다
p_thread = process_thread()
p_thread.setDaemon(True)
p_thread.start()
# Executing all test steps here
# test_step_1
do_something_1()
# test_step_n
do_something_n()
p_thread.run_thread = False
p_thread.join()
:이 모든에 의해 이루어집니다.
도움을 주시면 감사하겠습니다.
이 변수는 예외가없는 경우이 변수를 자주 물어 봐야하므로이 문제는 해결되지 않습니다. 그런 다음이 정보를 얻기 위해 정규 함수를 호출 할 수 있기 때문에 스레드에서 아무 것도 얻지 못합니다. 생성 된 데몬 스레드의 주 스레드에서 예외가 발생합니다. –
자,'thread.interrupt_main()'메소드를 시도해 보았습니다. 메인 스레드에서'KeyboardInterrupt'를 트리거 할 것입니다. 여기에 링크하십시오 : https://docs.python.org/2/library/thread.html#thread.interrupt_main –
감사합니다. 정확히 자기 정의 된 예외를 제기하는 것에 관해서 아무 것도 발견하지 못했기 때문에 내가 그랬던 것입니다. 최고야 –