`if __name__ == "__main__":`의 역할은 무엇인가요?


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))
  • 2016년 05월 28일에 작성됨

조회수 130


1 답변


좋아요
0
싫어요
채택취소하기

파이썬 인터프리터는 소스 파일을 읽어드리면서, 해당 파일의 모든 코드를 실행합니다. 코드를 실행하기 전, 인터프리터는 몇가지 특수한 변수들을 정의하는데, 예를들어 인터프리터가 실행하고자하는 모듈 (소스 파일)이 메인 프로그램으로써 실행된다면, 인터프리터는 __name__이라는 특수한 변수를 "__main__"으로 지정합니다. 반대로 해당 모듈이 다른 모듈로부터 불려진다면, __name__은 해당 모듈의 이름으로 지정됩니다.

올려주신 코드를 예로 들어, 해당 코드가 메인 프로그램으로서 실행된다고 생각해보죠.

python threading_example.py

즉, 커맨드 라인을 이용하여 위와 같이 실행하는 경우, 인터프리터는 특수한 변수들을 모두 설정한 후, import 문을 실행시켜 해당되는 모듈들을 불러올 겁니다. 그 후, def 블록을 읽어들여, 함수 오브젝트를 생성하고 해당 함수 오브젝트를 가리키는 myfunction이라는 변수를 생성하죠. 그 다음, if 문을 읽어들이고, __name__"__main__"과 일치하다는 걸 확인한 후에, 내부 코드를 실행시킵니다.

이런 식의 확인 과정을 거치는 이유는 작성한 파이썬 모듈 (.py 파일)이 때때로 직접적으로 실행될 수 있게끔 작성되기 때문입니다. 반대로, 다른 모듈로부터 불려져서 사용될 수도 있고요. 해당 모듈이 메인 프로그램인지를 검사하는 과정을 거침으로서, 같은 모듈을 필요에 따라 하나의 프로그램으로써 실행할 수도 있고, 해당 모듈을 다른 모듈에서 불러옴으로서 모듈 내부의 함수들을 불러올 수도 있는 겁니다.

보다 구체적인 정보는 이 페이지에서 확인하실 수 있습니다.

  • 2016년 05월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close