2014-06-06 4 views
0

서브 스레드가 파이썬에서 살아 있다면 주 스레드를 강제 종료하는 방법?서브 스레드가 파이썬에서 살아 있다면 주 스레드를 강제 종료하는 방법?

sys.exit()exit()은 하위 스레드가 완료 될 때까지 기다리는 것처럼 보입니까?

+0

하위 스레드가 비 데몬 스레드로 설정 되었기 때문일 수 있습니다. 그러나 이것이 실행이 멈추지 않을지 확실하지 않습니다. 들여다 볼만한 가치가 있습니다. 스레딩 모듈을 사용하는 경우 초기화시 데몬 상태를 확인하는 옵션이 있습니다. 기본적으로 모든 스레딩 프로세스는 상위 스레드 상태를 상속합니다. 부모가 메인이기 때문에 그들은 데몬이 아닌 것으로 설정됩니다. 이를 변경하려면 초기화하는 동안 daemon = False로 설정하십시오. – Bob

+0

답변 중 하나를 인용하려면 다음과 같이하십시오. "데몬 스레드가 없으면 프로그램을 완전히 종료하기 전에 스레드를 추적하고 종료하도록 지시해야합니다." –

+0

제가보기에 ... 주 스레드를 죽여 서브 스레드를 죽이는 것이 아이디어였습니다 ... 어쨌든 파이썬에서 가능합니까? – user3388884

답변

2

서브 스레드를 데몬 스레드로 전환하십시오. 예를 들어 :

class SubThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.daemon = True # Makes the thread a daemon thread 
     ... 

또는

subThread = threading.Thread(...) 
subThread.daemon = True 

프로그램이 종료

, 모든 데몬 스레드는 즉시을 죽을 것이다. 서브 스레드가 디먼 스레드가 아닌 경우, 은 프로그램이 종료되기 전에을 중지해야합니다. Serge가 의견에서 언급했듯이 " Is there any way to kill a Thread in Python?"은 스레드를 중지하는 방법에 대해 이야기합니다.

1

데몬 스레드로 설정하는 것이 좋습니다. 데몬 스레드에 대한 정보는 Daemon Threads Explanation에서 확인하십시오. 그런 다음 스레드가 완료 될 때까지 기다리지 않아야합니다.

+0

덕분에 많은 사람들이 ... 나는 데몬 스레드의 특성을 완전히 오해했습니다. – user3388884

+0

하지만 실제로 주 프로그램을 종료하는 데 어떤 기능을 사용합니까? 나는 sys.exit()을 사용하고 있지만, 하위 스레드가 Daemon으로 설정된 경우에도 주 스레드를 종료하지 않는 것 같습니다 ... – user3388884

관련 문제