Python 3.15.0b4에서 지연 임포트(lazy import)를 적용하면 필요한 순간까지 모듈 로딩을 미룰 수 있다. Daniel Lemire가 Intel Xeon Gold 6548N에서 실행한 장난감 명령줄 도구 실험에서는 --version 경로가 295ms에서 20ms로, CSV 평균을 계산하는 mean 경로가 296ms에서 24ms로 줄었다.
지연 임포트는 기존 임포트 앞에 lazy를 붙여 사용한다.
```
lazy import json
lazy from decimal import Decimal
```
이때 json은 처음부터 모듈을 불러오는 대신 자리표시자 객체가 된다. 실제 모듈은 json을 사용할 때 로드되며, 사용하지 않으면 로드되지 않는다.
Lemire는 json, csv, decimal, sqlite3, asyncio, email.parser, http.client, urllib.request, xml.etree.ElementTree, zipfile, tarfile, statistics와 numpy, pandas, requests, rich를 임포트하는 도구를 비교했다. --version은 문자열만 출력하고, mean은 작은 CSV 파일을 csv로 읽어 statistics.fmean을 호출하며, stats는 같은 파일을 pandas로 읽어 요약을 출력한다. 지연 임포트 버전은 임포트 줄마다 lazy를 추가한 것 외에는 동일했다.
측정 환경은 Python 3.15.0b4, numpy 2.5, pandas 3.0, requests 2.34였다.
--version: 일반 임포트 295ms, 지연 임포트 20ms, 15배 빨라졌다.mean: 일반 임포트 296ms, 지연 임포트 24ms, 12배 빨라졌다.stats: 일반 임포트 299ms, 지연 임포트 224ms, 1.3배 빨라졌다.
Lemire는 인터프리터 시작 시간인 11.7ms를 빼면 --version의 임포트 비용이 283ms에서 약 8ms로 줄어 35배 감소했다고 설명한다. 반면 일반 임포트에서는 누락된 모듈이 시작 시점에 오류를 일으키지만, 지연 임포트에서는 해당 모듈을 처음 사용하는 시점에 오류가 발생한다. 그 시점은 함수 내부일 수도 있고, 장시간 실행되는 서버에서는 몇 시간 뒤일 수도 있다.
Daniel Lemire, “Faster Python startup with lazy imports,” Daniel Lemire's blog, 2026년 10월 9일. 원문
Daniel Lemire는 퀘벡대학교(TELUQ) 컴퓨터과학 교수다. Daniel Lemire의 전체 게시물
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요