반응형
이것은 어리석은 질문이 될 수 있지만 Python에 대한 내 가정 중 일부를 테스트하고 있으며 다음 코드 조각이 스레드에서 호출 될 때 종료되지 않고 주 스레드에서 호출 될 때 종료되는 이유에 대해 혼란 스럽습니다.
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 () 문서에는 호출이 Python에서 종료되어야한다고 명시되어 있습니다. 이 프로그램의 출력에서 "post thread exit"가 인쇄되지 않는다는 것을 알 수 있습니다. 그러나 주 스레드는 스레드가 exit를 호출 한 후에도 계속 진행됩니다.
인터프리터의 개별 인스턴스가 각 스레드에 대해 생성되고 exit ()에 대한 호출이 해당 개별 인스턴스를 종료합니까? 그렇다면 스레딩 구현은 공유 리소스에 대한 액세스를 어떻게 관리합니까? 스레드에서 프로그램을 종료하려면 어떻게해야합니까 (실제로 원하는 것은 아니지만 이해하도록 함)?
해결 방법
sys.exit ()
는 thread.exit ()
처럼 SystemExit
예외를 발생시킵니다. 따라서 sys.exit ()
가 해당 스레드 내에서 해당 예외를 발생 시키면 thread.exit ()
를 호출하는 것과 동일한 효과를 가지므로 스레드 만 종료됩니다.
참조 페이지 https://stackoverflow.com/questions/905189
반응형
'파이썬' 카테고리의 다른 글
파이썬 Hide all warnings in ipython (0) | 2020.09.19 |
---|---|
파이썬 Finding the average of a list (0) | 2020.09.19 |
파이썬 Python :“List.append =‘list’객체 속성‘append’는 읽기 전용입니다.” (0) | 2020.09.18 |
파이썬 개체 목록에 특정 속성 값을 가진 개체가 포함되어 있는지 확인 (0) | 2020.09.18 |
파이썬 경고를 찾을 수 없음 : /favicon.ico (0) | 2020.09.18 |
댓글