이것은 바보 같은 질문 일 수 있지만 파이썬에 대한 내 가정을 테스트하고 있는데 다음 코드 스 니펫이 스레드에서 호출 될 때 종료되지 않는 이유에 대해 혼란 스럽지만 주 스레드에서 호출 될 때 종료됩니다 실.파이썬에서 스레드 내에서 호출 될 때 sys.exit()가 종료되지 않는 이유는 무엇입니까?
import sys, time
from threading import Thread
def testexit():
time.sleep(5)
sys.exit()
print "post thread exit"
t = Thread(target = testexit)
t.start()
t.join()
print "pre main exit, post thread exit"
sys.exit()
print "post main exit"
sys.exit()에 대한 문서에서 파이썬을 종료해야한다고 나와 있습니다. 나는이 프로그램의 결과에서 "post thread exit"가 결코 출력되지 않는다는 것을 알 수있다. 그러나 메인 쓰레드는 thread가 exit를 호출 한 후에도 계속 진행한다.
인터프리터의 별도 인스턴스가 각 스레드에 대해 만들어지고 exit()를 호출하면 해당 인스턴스가 종료됩니까? 그렇다면 스레딩 구현이 공유 리소스에 대한 액세스를 어떻게 관리합니까? 스레드에서 프로그램을 종료하고 싶다면 (실제로 원하는 것은 아니지만 단지 이해할 수 있습니다)?
여기에 '대기열'이 필요 없습니다. 단순한'bool' 만 잘 할 것입니다. 이 변수의 전형적인 이름은'is_active'이고 초기 기본값은'True'입니다. –
네, 맞습니다. http://effbot.org/zone/thread-synchronization.htm에 따르면 'bool'(또는 다른 원자 연산)을 수정하면이 특정 문제를 완벽하게 수행 할 수 있습니다. 내가'Queue'를 사용하는 이유는 스레드 된 에이전트로 작업 할 때 거의 즉시 여러 가지 다른 신호 ('flush','reconnect','exit' 등)를 필요로한다는 것입니다. – Deestan