본문 바로가기
파이썬

파이썬 Ctrl-C 즉, ​​KeyboardInterrupt를 사용하여 Python에서 스레드 종료

by º기록 2020. 10. 24.
반응형

KeyboardInterrupt 예외가 Python의 주 스레드에서만 발생한다는 것을 읽었습니다. 또한 자식 스레드가 실행되는 동안 주 스레드가 차단된다는 것도 읽었습니다. 따라서 이것은 CTRL + C 가 하위 스레드에 도달 할 수 없음을 의미합니까? 다음 코드를 시도했습니다.

def main():
    try:
        thread = threading.Thread(target=f)
        thread.start()  # thread is totally blocking (e.g., while True)
        thread.join()
    except KeyboardInterrupt:
        print "Ctrl+C pressed..."
        sys.exit(1)

def f():
    while True:
        pass  # do the actual work

이 경우 CTRL + C 가 실행에 미치는 영향은 없습니다. 신호를들을 수없는 것과 같습니다. 나는 이것을 잘못된 방식으로 이해하고 있습니까? CTRL + C 를 사용하여 스레드를 종료하는 다른 방법이 있습니까?

 

해결 방법

 

문제는 thread1.join () 을 사용하고 있다는 것입니다. 이로 인해 해당 스레드가 계속 진행될 때까지 프로그램이 대기하게됩니다.

시그널은 항상 메인 프로세스에 의해 포착됩니다. 왜냐하면 시그널을받는 것은 스레드가있는 프로세스이기 때문입니다.

보시다시피, 기본적으로 스레드 기능없이 '일반적인'응용 프로그램을 실행하는 것입니다. 스레드 1 개를 시작하고 완료 될 때까지 계속 기다립니다.

 

참조 페이지 https://stackoverflow.com/questions/4136632

 

 

반응형

댓글