速度惊人,Rust 使 Python 函数速度提高 5000%

2024年 3月 11日 99.1k 0

大家好,我是渔夫。

大家都知道,Rust 因其卓越的性能和安全性,正被越来越多的科技巨头采用,甚至白宫也推荐开发者使用Rust来构建关键软件。

今天,来深入学习一下,如何利用 Rust 来大幅提升你的 Python代码性能!

寻找第N个质数,Python实现

下列,编写一个 Python 函数来寻找第N个质数。

def is_prime(num):
    # 检查一个数字是否为质数。
    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个质数。
    count = 0
    num = 1
    while count < n:
        num += 1
        if is_prime(num):
            count += 1
    return num

python prime_finder.py 50当我在终端中执行命令时,获得的响应如下所示。

寻找第 N 个素数,Rust 实现

fn is_prime_rust(num: u32) -> bool {
    if num  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 # 创建项目目录

$ python -m venv env # 创建Python虚拟环境

$ source ./env/Scripts/activate # 激活虚拟环境

第二步:安装Maturin

接下来,我们使用Maturin,这是一个帮助我们构建和发布带有pyo3、rust-cpython和CFFI绑定以及Rust二进制文件作为Python包的工具。

$ pip install maturin  # 使用pip安装maturin

步骤3:使用Rust创建Python模块

在这一步中,我们使用Rust函数创建一个Python模块。

// rust_prime_funcs/src/lib.rs

use pyo3::prelude::*;

// Rust中的辅助函数
#[pyfunction]
fn is_prime_rust(num: u32) -> bool {
    // ...(与上面Rust实现相同)
}

// Rust中的第N个质数查找函数
#[pyfunction]
fn find_nth_prime_rust(n: u32) -> u32 {
    // ...(与上面Rust实现相同)
}

/// 用Rust实现的Python模块。
#[pymodule]
fn rust_prime_funcs(_py: Python, m: &PyModule) -> PyResult {
    m.add_function(wrap_pyfunction!(find_nth_prime_rust, m)?)?;
    Ok(())
}

第四步:构建Python模块

我们使用以下命令在终端构建Python模块。

$ maturin develop --release

步骤5:比较Python与Rust函数的性能

最后,我们比较两个函数的性能

# 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()

让我们执行这段代码来比较性能。

Rust函数在寻找第N个质数时,比我们的Python实现快了5264.74%,或者说几乎是Python实现的53倍!

好了,今天又水了一篇,上面是在 Python 代码中使用 Rust 的简单示例,但有一些重要的库要么提供 Python 到 Rust 代码的绑定,要么完全用 Rust 编写。

未来AI时代,一定是注重安全性能,以及速度,一起加油了!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论