더북(TheBook)

불행히도 파이썬 프로그램은 기계어 실행 파일로 컴파일되는 언어에 비해 일반적으로 시작 시간이 길다는 단점이 있다. CPython 인터프리터에서 실행 속도가 느려지는 원인은 크게 두 가지다. 첫째, 프로그램이 시작될 때 CPython은 소스 코드를 읽고, 이를 바이트코드로 변환해 가상 머신에서 실행할 준비를 한다. 이 과정에서 I/O와 CPU 연산이 모두 필요하기 때문에 속도가 느려진다(아이템 68 “스레드를 블러킹 I/O에 사용하고 병렬성에는 사용하지 말라”에서 자세한 내용을 볼 수 있다). 둘째, 바이트코드가 준비되면 파이썬은 메인 진입점이 임포트한 모든 모듈을 실행한다. 모듈을 로드하는 과정에서 전역 변수와 상수 초기화, 클래스 정의, 단언문 실행 등을 하기 위해 코드를 실행해야 하는데, 이 모든 과정에 시간이 많이 걸릴 수 있다.

성능을 향상시키기 위해 한 번 프로그램이 로드한 모듈은 메모리에 캐싱되며, 프로그램이 실행되면서 나중에 같은 모듈을 임포트하면 캐싱된 모듈을 재사용한다(아이템 122 “순환 의존성을 깨는 방법을 알아두라”에서 자세한 내용을 볼 수 있다). 또한 CPython은 컴파일된 바이트코드를 프로그램 실행 시 재사용 가능하도록 디스크에 캐싱한다. 캐싱된 바이트코드는 __pycache__ 디렉터리에 저장된다. 각 바이트코드 파일은 .pyc라는 확장자로 저장되며, 일반적으로 그에 대응하는 소스 파일보다 크기가 작다.