PyO3는 파이썬에서 러스트 코드를 실행할수 있고 반대로 러스트에서 파이썬 코드를 실행할 수 있도록 도와주는 크레이트 입니다.
maturin
maturin으로 프로젝트를 생성합니다.
maturin init -b pyo3
프로젝트를 생성하면 아래와 같이 폴더가 만들어집니다.
.
├── Cargo.lock
├── Cargo.toml
├── Pipfile
├── pyproject.toml
├── src
└── lib.rs
Cargo.toml pyproject.toml 파일에서 패키지와 라이브러리 프로젝트 이름을 변경합니다.
라이브러리 크레이트를 만듭니다.
#[pyfunction],#[pymodule]은 PyO3 라이브러리에서 제공하는 Attribute입니다. 러스트 함수를 파이썬 함수로 정의하는데 사용합니다.
러스트 함수에 #[pyfunction] Attribute를 추가하면 PyO3는 해당 함수를 파이썬 모듈의 초기화 함수로 사용할 수 있는 코드를 생성합니다.
러스트 함수에 #[pymodule] Attribute를 추가하면 PyO3는 해당 함수를 파이썬 모듈의 초기화 함수로 사용할 수 있는 코드를 생성합니다.
모듈에 함수를 추가하려면 add_function메서드를 사용합니다. 모듈 내에서 함수를 호출 가능한 객체로 사용할 수 있습니다.
src/lib.rs
use pyo3::prelude::*;
fn _run(n: u64) -> u64 {
match n {
0 => 0,
1 => 1,
_ => _run(n - 1) + _run(n - 2),
}
}
#[pyfunction]
fn run(n: u64) -> PyResult<u64> {
Ok(_run(n))
}
/// A Python module implemented in Rust.
#[pymodule]
fn fibonacci(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(run, m)?)?;
Ok(())
}
파이썬에서 러스트 코드 실행해 보기
maturin develop
main.py를 추가해
피보나치 수열을 구하는 함수 pyrun 을 추가하고 러스트crate와 성능을 비교합니다.
python: 1.05, result: 9227465
rust: 0.06, result: 9227465
rust가 약 17배 빠른것을 확인할 수 있습니다.
maturin
maturin으로 프로젝트를 생성합니다.
maturin init -b pyo3
프로젝트를 생성하면 아래와 같이 폴더가 만들어집니다.
.
├── Cargo.lock
├── Cargo.toml
├── Pipfile
├── pyproject.toml
├── src
└── lib.rs
Cargo.toml pyproject.toml 파일에서 패키지와 라이브러리 프로젝트 이름을 변경합니다.
라이브러리 크레이트를 만듭니다.
#[pyfunction],#[pymodule]은 PyO3 라이브러리에서 제공하는 Attribute입니다. 러스트 함수를 파이썬 함수로 정의하는데 사용합니다.
러스트 함수에 #[pyfunction]Attribute를 추가하면 PyO3는 해당 함수를 파이썬 모듈의 초기화 함수로 사용할 수 있는 코드를 생성합니다.
러스트 함수에 #[pymodule]Attribute를 추가하면 PyO3는 해당 함수를 파이썬 모듈의 초기화 함수로 사용할 수 있는 코드를 생성합니다.
모듈에 함수를 추가하려면 add_function메서드를 사용합니다. 모듈 내에서 함수를 호출 가능한 객체로 사용할 수 있습니다.
src/lib.rs
use pyo3::prelude::*;
fn _run(n: u64) -> u64 {
match n {
0 => 0,
1 => 1,
_ => _run(n - 1) + _run(n - 2),
}
}
#[pyfunction]
fn run(n: u64) -> PyResult<u64> {
Ok(_run(n))
}
/// A Python module implemented in Rust.
#[pymodule]
fn fibonacci(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(run, m)?)?;
Ok(())
}
파이썬에서 러스트 코드 실행해 보기
maturin develop
main.py를 추가해
피보나치 수열을 구하는 함수 pyrun 을 추가하고 러스트crate와 성능을 비교합니다.
python: 1.05, result: 9227465
rust: 0.06, result: 9227465
rust가 약 17배 빠른것을 확인할 수 있습니다.
'Rust' 카테고리의 다른 글
[Rust] video-rs (94) | 2023.07.03 |
---|---|
[Rust] ONNX모델로 detection (23) | 2023.07.02 |
Rust Trait (160) | 2023.06.20 |
Rust Generic 데이터 타입 (91) | 2023.06.19 |
Rust testing (142) | 2023.06.15 |