速度驚人,Rust 使 Python 函數(shù)速度提高 5000%
大家好,我是漁夫。
大家都知道,Rust 因其卓越的性能和安全性,正被越來越多的科技巨頭采用,甚至白宮也推薦開發(fā)者使用Rust來構(gòu)建關(guān)鍵軟件。
今天,來深入學(xué)習一下,如何利用 Rust 來大幅提升你的 Python代碼性能!
尋找第N個質(zhì)數(shù),Python實現(xiàn)
下列,編寫一個 Python 函數(shù)來尋找第N個質(zhì)數(shù)。
def is_prime(num):
# 檢查一個數(shù)字是否為質(zhì)數(shù)。
if num < 2:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
def find_nth_prime(n):
# 尋找第N個質(zhì)數(shù)。
count = 0
num = 1
while count < n:
num += 1
if is_prime(num):
count += 1
return num
python prime_finder.py 50當我在終端中執(zhí)行命令時,獲得的響應(yīng)如下所示。
尋找第 N 個素數(shù),Rust 實現(xiàn)
fn is_prime_rust(num: u32) -> bool {
if num < 2 {
return false;
}
for i in 2..num {
if num % i == 0 {
return false;
}
}
true
}
fn find_nth_prime_rust(n: u32) -> u32 {
let mut count: u32 = 0;
let mut num: u32 = 1;
while count < n {
num += 1;
if is_prime_rust(num) {
count += 1;
}
}
num
}
在 Python 中集成 Rust 代碼
步驟1:初始化我們的項目
$ mkdir rust_prime_funcs && cd rust_prime_funcs # 創(chuàng)建項目目錄
$ python -m venv env # 創(chuàng)建Python虛擬環(huán)境
$ source ./env/Scripts/activate # 激活虛擬環(huán)境
第二步:安裝Maturin
接下來,我們使用Maturin,這是一個幫助我們構(gòu)建和發(fā)布帶有pyo3、rust-cpython和CFFI綁定以及Rust二進制文件作為Python包的工具。
$ pip install maturin # 使用pip安裝maturin
步驟3:使用Rust創(chuàng)建Python模塊
在這一步中,我們使用Rust函數(shù)創(chuàng)建一個Python模塊。
// rust_prime_funcs/src/lib.rs
use pyo3::prelude::*;
// Rust中的輔助函數(shù)
#[pyfunction]
fn is_prime_rust(num: u32) -> bool {
// ...(與上面Rust實現(xiàn)相同)
}
// Rust中的第N個質(zhì)數(shù)查找函數(shù)
#[pyfunction]
fn find_nth_prime_rust(n: u32) -> u32 {
// ...(與上面Rust實現(xiàn)相同)
}
/// 用Rust實現(xiàn)的Python模塊。
#[pymodule]
fn rust_prime_funcs(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_function(wrap_pyfunction!(find_nth_prime_rust, m)?)?;
Ok(())
}
第四步:構(gòu)建Python模塊
我們使用以下命令在終端構(gòu)建Python模塊。
$ maturin develop --release
步驟5:比較Python與Rust函數(shù)的性能
最后,我們比較兩個函數(shù)的性能
# rust_prime_funcs/test/prime_finder.py
import sys
from timeit import timeit
from rust_prime_funcs import find_nth_prime_rust
# ...(Python代碼與上面相同)
def main():
n = int(sys.argv[1])
# ...(Python代碼與上面相同)
ITERATIONS = 100
python_time_per_iter = timeit(
lambda: find_nth_prime(n), number=ITERATIONS) / ITERATIONS
rust_time_per_iter = timeit(
lambda: find_nth_prime_rust(n), number=ITERATIONS) / ITERATIONS
# ...(Python代碼與上面相同)
if __name__ == "__main__":
main()
讓我們執(zhí)行這段代碼來比較性能。
Rust函數(shù)在尋找第N個質(zhì)數(shù)時,比我們的Python實現(xiàn)快了5264.74%,或者說幾乎是Python實現(xiàn)的53倍!
好了,今天又水了一篇,上面是在 Python 代碼中使用 Rust 的簡單示例,但有一些重要的庫要么提供 Python 到 Rust 代碼的綁定,要么完全用 Rust 編寫。
未來AI時代,一定是注重安全性能,以及速度,一起加油了!