스레드가 무한 루프에있는 경우 메인 프로그램이 끝날 때 종료하는 방법이 있습니까 (예 : ctrl+C
을 누를 때)?파이썬 : 메인 프로그램이 끝날 때 스레드를 종료하는 방법
답변
이 질문을 확인하십시오. Is there any way to kill a Thread in Python?
가 키보드 인터럽트 신호 (Ctrl + C)에서 스레드 정지하려면 당신이 종료하기 전에 예외 "KeyboardInterrupt"및 정리를 잡을 수 : 정답은 올바른 방법으로 나사산 종료하는 방법에 대한 좋은 설명이있다. 이처럼 :
try:
start_thread()
except (KeyboardInterrupt, SystemExit):
cleanup_stop_thread()
sys.exit()
이 프로그램이 갑자기 종료 될 때마다 무엇을 제어 할 수있는이 방법.
또한 사용할 수있는 내장 (특정 경우에 SIGINT 신호) 당신에게 설정 신호 처리기를 할 수 있습니다 신호 모듈 : http://docs.python.org/library/signal.html
당신이 당신의 노동자가 데몬 스레드를 스레드 할 경우, 그들이 죽을를 모두를 비 데몬 스레드 (예 : 메인 스레드)가 종료되었습니다.
http://docs.python.org/library/threading.html#threading.Thread.daemon
간단하고 정확한 답을 주셔서 감사합니다. 기본 threading.Thread 데몬 상태 인 isDaemon()은 False입니다. setDaemon (True)로 True로 설정하십시오. – Tony
이 질문에 대답하고 그냥 작동합니다. op는 스레드를 정상적으로 종료하는 방법을 묻지 않았습니다. –
사용 파이썬의 표준 라이브러리의 atexit 모듈 캐치되지 않는 예외 등을 포함하여 메인 스레드의 합리적으로 "깨끗한"종료에 (주 스레드에서) 호출되는 "종료"기능을 등록 KeyboardInterrupt
. 이러한 종료 기능은 (비록 필연적으로 메인 스레드에서도!) 어떤 stop
함수로 호출 할 수 있습니다. 스레드를 daemon
으로 설정할 수있는 가능성과 함께 필요한 시스템 기능을 적절히 설계 할 수있는 도구를 제공합니다.
이 접근법은 2.6.5 이전의 Python 버전에서 데몬 스레드를 사용하지 않고도 효과가있었습니다. http://stackoverflow.com/questions/3713360/python-2-6-x-theading-signals-atexit-fail- 일부 버전. 이것은 종료시 데몬 스레드가 파이썬 3.4 (http://bugs.python.org/issue19466) 이전에 약간 엉망 이었기 때문에 불행한 IMHO입니다. atexit 핸들러에서 데몬 스레드를 멈추고 스레드 결합을 중지하면 스레드 해체를 직렬화하는 비용이 거의 들지 않아도됩니다. – NeilenMarais
이렇게 스레드를 생성하는 경우 - myThread = Thread(target = function)
- 그리고 myThread.start(); myThread.join()
을 수행하십시오. CTRL-C가 시작되면 메인 스레드는 블로킹 myThread.join()
호출을 기다리고 있기 때문에 종료하지 않습니다. 이 문제를 해결하려면 .join() 호출에서 제한 시간을 넣기 만하면됩니다. 타임 아웃은 원하는만큼 길어질 수 있습니다. 만약 무한정 기다리고 싶다면, 99999와 같은 아주 긴 시간 제한을 넣으십시오. myThread.daemon = True
을 실행하는 것이 좋습니다. 그러면 메인 스레드 (비 데몬)가 종료 될 때 모든 스레드가 종료됩니다.
'myThread.daemon = True'는이 문제에 대한 훌륭한 해결책입니다. – Brannon
@Brannon'.daemon = True'는 단단한 해결책이 아닙니다. 이 스레드에서 설명을 확인하십시오. https://stackoverflow.com/a/20598791/5562492 –
- 1. 메인 스레드를 종료 할 때 어떻게 자식 스레드를 종료합니까?
- 2. 내 winform 응용 프로그램이 닫힐 때 스레드를 중지하는 방법
- 3. NSOperationqueue 메인 스레드를 차단하고 싶습니다.
- 4. NSURLConnection이 메인 스레드를 차단합니까?
- 5. 메인() 스레드를 잠급니다.
- 6. 제거 프로그램이 끝날 때까지 기다리는 방법?
- 7. 청취 스레드를 종료하는 Linux 소켓
- 8. 자바에서 스레드를 종료하는 방법은 무엇입니까?
- 9. 응용 프로그램이 끝날 때 백그라운드 스레드가 종료되도록하는 방법은 무엇입니까?
- 10. 응용 프로그램이 비활성화 될 때 스레드를 닫는 방법?
- 11. 스레드가 절전 모드 일 때 스레드를 종료하는 방법은 무엇입니까?
- 12. dll에서 교수형 스레드를 올바르게 종료하는 방법은 무엇입니까?
- 13. 스레드를 종료하는 가장 좋은 방법은 무엇입니까? C#
- 14. tomcat에서 실행중인 웹 응용 프로그램이 소유 한 로컬 스레드를 올바르게 종료하는 방법
- 15. 디버그로 메인 스크립트를 종료하는 래퍼 스크립트
- 16. 스트림을 읽는 동안 Python3 스레드를 올바르게 종료하는 방법
- 17. 도달 가능성 코드가 메인 스레드를 차단하고 있습니다.
- 18. 실행중인 모든 스레드를 종료하는 방법은 무엇입니까?
- 19. 보기가 끝날 때 스크롤
- 20. xfce 세션이 끝날 때 스크립트를 실행하는 방법
- 21. 파이썬 스레드를 사용하여 값
- 22. catch 예외를 종료하는 방법
- 23. 브라우저가 Sharepoint에서 닫힐 때 세션을 종료하는 방법
- 24. 메인 UI 스레드를 멈추는 비동기 스레드
- 25. 안드로이드에서 ASyncTask 스레드를 중지하는 방법
- 26. 명시 적으로 파이썬 스레드를 결합 하시겠습니까?
- 27. performSelectorInBackground : thread를 종료하는 방법은 무엇입니까?
- 28. Android :: 서비스를 강제 종료하는 방법
- 29. 주 응용 프로그램이 사용 중일 때 스레드 멈춤을 피하는 방법
- 30. if 절을 종료하는 방법
답장을 보내 주셔서 감사합니다. 나는 질문을 정확하게 말하지 않았을 수도 있습니다. 이 질문에 주어진 예제에서 스레드의 stop() 함수를 실행해야했습니다. Ctrl + C로 비정상적으로 프로그램을 종료하면 그럴 수 없습니다. 그래서, 내 질문은 "주 스레드 흐름이 중단되면 mythread.stop() 함수를 호출하는 방법"과 비슷합니다. – facha
내 질문을 편집했습니다. – rogeriopvl
코드 예제에서 아직 세미콜론을 발견하지 못했습니까? 좋아! –