`if __name__ == "__main__":`의 역할은 무엇인가요?
조회수 4385회
if __name__ == "__main__":
의 역할은 무엇인가요?
# Threading example
import time, thread
def myfunction(string, sleeptime, lock, *args):
while 1:
lock.acquire()
time.sleep(sleeptime)
lock.release()
time.sleep(sleeptime)
if __name__ == "__main__":
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
1 답변
-
파이썬 인터프리터는 소스 파일을 읽어드리면서, 해당 파일의 모든 코드를 실행합니다. 코드를 실행하기 전, 인터프리터는 몇가지 특수한 변수들을 정의하는데, 예를들어 인터프리터가 실행하고자하는 모듈 (소스 파일)이 메인 프로그램으로써 실행된다면, 인터프리터는
__name__
이라는 특수한 변수를"__main__"
으로 지정합니다. 반대로 해당 모듈이 다른 모듈로부터 불려진다면,__name__
은 해당 모듈의 이름으로 지정됩니다.올려주신 코드를 예로 들어, 해당 코드가 메인 프로그램으로서 실행된다고 생각해보죠.
python threading_example.py
즉, 커맨드 라인을 이용하여 위와 같이 실행하는 경우, 인터프리터는 특수한 변수들을 모두 설정한 후,
import
문을 실행시켜 해당되는 모듈들을 불러올 겁니다. 그 후,def
블록을 읽어들여, 함수 오브젝트를 생성하고 해당 함수 오브젝트를 가리키는myfunction
이라는 변수를 생성하죠. 그 다음,if
문을 읽어들이고,__name__
이"__main__"
과 일치하다는 걸 확인한 후에, 내부 코드를 실행시킵니다.이런 식의 확인 과정을 거치는 이유는 작성한 파이썬 모듈 (
.py
파일)이 때때로 직접적으로 실행될 수 있게끔 작성되기 때문입니다. 반대로, 다른 모듈로부터 불려져서 사용될 수도 있고요. 해당 모듈이 메인 프로그램인지를 검사하는 과정을 거침으로서, 같은 모듈을 필요에 따라 하나의 프로그램으로써 실행할 수도 있고, 해당 모듈을 다른 모듈에서 불러옴으로서 모듈 내부의 함수들을 불러올 수도 있는 겁니다.보다 구체적인 정보는 이 페이지에서 확인하실 수 있습니다.
댓글 입력