2023 PyO3로 파이썬 100배 빠르게 만들기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- Python 개발자 및 성능 최적화 담당자
- Rust와 PyO3 경험자 대상
- 중간~고급 난이도 (성능 프로파일링, FFI 사용 경험 필요)
핵심 요약
- PyO3 + maturin으로 Python ↔ Rust FFI 구현하여 101배 성능 개선
- 점진적 최적화 전략 :
py-spy
로 병목 식별 →find_close_polygons
함수부터 Rust 이식 →Polygon
자료구조까지 이식 - 성능 향상 핵심 요소 :
ndarray
/numpy
crate 사용, 할당/복사 최소화, 직접 거리 계산
섹션별 세부 요약
1. 문제 정의 및 병목 식별
- 사내 3-D 처리 파이프라인의 핵심 Python 라이브러리가 동시 사용자 증가로 병목 발생
py-spy
샘플링 프로파일러 사용으로 병목 함수 식별- 전체 Rust 재작성 대신 부분 최적화 전략 선택
2. Rust 도입 및 PyO3 통합
PyO3
+maturin
으로 Python ↔ Rust 연결find_close_polygons
함수부터 Rust로 이식 → 초기 성능 12.5배 향상Polygon
자료구조도 Rust로 이식 → Python에서 서브클래싱 가능ndarray
/numpy
crate로 Rust 측 배열/선형대수 처리
3. 반복적 최적화 및 결과
- NumPy → Rust 변환 최소화 및 직접 거리 계산으로 미세 최적화
- v3 단계에서 2.90ms 달성 → 101배 성능 향상
- 성능 지표 :
- v1
: 23.44ms (12.5×)
- v2
: 6.29ms (46.5×)
- v3
: 2.90ms (101×)
결론
- 프로파일링을 통해 작은 코드 변경으로 큰 성능 향상 가능
- Python API 유지하면서 Rust 모듈만 교체해도 실사용 서비스에 즉시 적용 가능
- Rust는 "성능 영역"을 얇게 도입해도 효과적 →
PyO3
사용 권장