Bob Belderbos: 파이썬 안에서 라이브러리가 ... 노트

Bob Belderbos: 파이썬 안에서 라이브러리가 Rust를 실행하는 방법 (PyO3와 함께)

Pydantic v2의 데이터 검증은 pyO3를 사용해 구축된 pydantic-core라는 Rust 확장에 의존합니다. 이 글은 Rust에서 맞춤형 JSON 파서를 만들고 이를 Python에 노출하는 방법을 보여줍니다. 이 과정은 Rust 모듈을 작성하고, PyO3 매크로로 주석을 달고, maturin을 사용해 컴파일 및 설치하는 과정을 포함합니다. 예제의 핵심은 JSON 트리 구조를 나타내는 Rust enum입니다. Python에 함수를 노출하려면 Python, Bound와 같은 특정 PyO3 주석과 타입이 필요합니다. 가장 중요한 점은 Rust 데이터 구조를 다시 Python 객체로 변환하는 것입니다. 이 '복귀 과정'은 수많은 Python 객체를 생성하는 것을 포함하며, 이는 대형 JSON 문서의 파싱보다 비용이 더 많이 들 수 있습니다. 이 변환은 IntoPyObject 특성을 구현하여 처리합니다. 오류는 번역이 필요합니다; Rust 오류는 From 특성을 사용하여 Python 예외로 변환됩니다. 스칼라 반환값의 경우, 경계를 넘는 비용은 무시할 만합니다. 하지만 대형 구조물의 경우 변환 비용이 상당하며 성능이 우선 결정될 수 있습니다. 이 경계 변환을 최적화하는 것, 예를 들어 게으른 뷰를 반환하는 것은 성공적인 Rust-to Python 이식에 매우 중요합니다. 따라서 Rust와 Python 간 경계 프로파일링이 필수적입니다.
CdXz5zHNQW_y8hcnXdNTs.png