#CPython #Rust #Maturin #
Maturin
https://www.maturin.rs/index.html
이거 왜쓰나?
파이썬이 느린데... 이걸 어쩌지... 고민할 때가 바로 maturin 을 고려해볼 때!
왜 빠르나?
Rust 는 C++와 거의 대등한 정도의 퍼포먼스를 보여주는 언어!
예를 들어보자!
재귀함수를 파이썬에서 돌려보면.. 기가막힌다.
먼저 피보나치함수를 재귀 형태로 만들어 간단하게 돌려보면,
# python_recursive_test.py
import time
def fib_sum(i):
if i == 1:
return 1
if i == 2:
return 1
return fib_sum(i-2) + fib_sum(i-1)
st = time.time()
for i in range(2, 40):
print(i, fib_sum(i))
print(f'py lap time : {time.time() - st}')
이렇게 간단한 함수를 실행해보면 대략
py lap time : 22.059756994247437
기록을 보여준다.
이걸 똑같이 Rust 로 만들어서 python 에서 import 해서 사용해본다.
# rust_recursive_test.py
import time
from rust_recursive_proj import *
st = time.time()
for i in range(2, 40):
print(i, recursive_as_isize(i))
print(f'rust lap time : {time.time() - st}')
# rust_recursive_proj.rs
use pyo3::prelude::*;
pub fn fib(i: i64) -> i64 {
if i == 1 { return 1; }
if i == 2 { return 1; }
return fib(i-2) + fib(i-1);
}
#[pyfunction]
pub fn recursive_as_isize(n: i64) -> PyResult<i64> {
Ok(fib(n))
}
/// A Python module implemented in Rust.
#[pymodule]
pub fn rust_recursive_proj(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(recursive_as_isize, m)?)?;
Ok(())
}
해당 rust 파일을 컴파일해서 파이썬에서 모듈로 가져다 사용하는 방법은
위에 공식자료를 통해서 금방 파악할 수 있다.
랩타임은 rust lap time : 0.8686699867248535
퍼포먼스 적으로 느껴지는 부분이 많다!
아직 멀티프로세스를 활용하거나 하는 수준의 비교는 아니지만,
프로젝트를 진행함에 있어서 파이썬의 파워를 높일 수 있다는 점에서 긍정적으로 느껴졌다.
끝!