自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

速度驚人,Rust 使 Python 函數(shù)速度提高 5000%

開發(fā)
今天,來深入學(xué)習一下,如何利用 Rust 來大幅提升你的 Python 代碼性能!

大家好,我是漁夫。

大家都知道,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時代,一定是注重安全性能,以及速度,一起加油了!

責任編輯:趙寧寧 來源: 碼農(nóng)碼農(nóng)漁夫
相關(guān)推薦

2023-05-04 07:34:37

Rust代碼CPU

2021-06-09 08:00:00

Python編程語言開發(fā)

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

2014-04-08 16:54:27

移動應(yīng)用運營

2011-05-30 13:15:05

PHP

2011-05-30 13:28:00

PHP

2011-05-18 09:45:57

Rails

2011-08-15 18:20:05

建立索引SQL Sever數(shù)據(jù)

2011-08-16 13:27:34

索引

2009-12-31 16:18:44

Silverlight

2009-03-30 14:12:38

LinuxUnladenSwallow

2009-06-16 14:52:45

曙光高性能計算HPC

2022-05-25 16:31:25

數(shù)據(jù)泄露勒索軟件網(wǎng)絡(luò)攻擊

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技術(shù)棧公眾號