「프로그램이 느린데 어디가 느린지 모르겠다」 — 이때 필요한 게 프로파일러입니다.
cProfile이 표준 라이브러리에 있고, 「어느 함수가 몇 번 호출되고 얼마나 시간을 썼는지」 분석합니다.
기본.
python -m cProfile script.py — 실행 후 함수별 시간 출력.
python -m cProfile -o out.prof script.py — 결과를 파일로 저장(이후 분석).
결과 읽기.
ncalls(호출 횟수), tottime(자기 함수 안의 시간), cumtime(자기 + 호출한 함수의 시간), percall(평균).
cumtime 큰 순으로 정렬해 「전체 시간의 80%를 어디서 쓰나」 확인.
코드 안에서.
import cProfile, pstats.
profiler = cProfile.Profile().
profiler.enable(); my_function(); profiler.disable().
pstats.Stats(profiler).sort_stats("cumtime").print_stats(20).
특정 부분만 측정.
시각화 — snakeviz·pyinstrument.
snakeviz out.prof — 브라우저에서 인터랙티브한 「불꽃 그래프」 표시.
pyinstrument는 더 가볍고 직관적인 출력.
콜스택을 통째로 시각화하면 병목이 한눈에 보입니다.
한 줄 요약
cProfile은 함수별 호출 횟수·시간 측정.
cumtime으로 전체 시간 큰 부분 식별.
snakeviz·pyinstrument로 시각화하면 병목이 한눈에 보임.
더 알아볼 것
- line_profiler — 줄 단위 분석
- pyinstrument — 통계적 프로파일러
- py-spy — 외부 프로세스 프로파일링