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

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

大家好,我是渔夫。

大家都知道,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 < 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 # 创建项目目录

$ 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时代,一定是注重安全性能,以及速度,一起加油了!

责任编辑:赵宁宁 来源: 码农码农渔夫
相关推荐

2023-05-04 07:34:37

Rust代码CPU

2021-06-09 08:00:00

Python编程语言开发

2016-09-07 15:02:03

ElasticSear索引速度

2024-06-27 11:00:07

2020-11-09 14:17:13

Rust编码语言

2023-12-18 16:40:23

OxlintJavaScripRust

2011-05-30 13:15:05

PHP

2011-05-30 13:28:00

PHP

2014-04-08 16:54:27

移动应用运营

2009-12-31 16:18:44

Silverlight

2011-05-18 09:45:57

Rails

2011-08-16 13:27:34

索引

2011-08-15 18:20:05

建立索引SQL Sever数据

2009-03-30 14:12:38

LinuxUnladenSwallow

2009-06-16 14:52:45

曙光高性能计算HPC

2022-05-25 16:31:25

数据泄露勒索软件网络攻击

2010-03-12 15:49:46

Python字串查找

2011-11-17 15:30:34

JavaNIOIO

2010-05-21 17:27:33

IIS管理窗口

2012-05-16 10:21:04

英特尔SSDPCIe
点赞
收藏

51CTO技术栈公众号