使用 Rust 扩展 Robyn

有时,蝙蝠侠可能需要处理 CPU 密集型任务或需要大量内存的操作。在这种情况下,他可能希望使用 Rust 来实现这些任务。Robyn 提供了一种特殊的方式,允许通过 Rust 扩展 Python 代码,并且能够在保持代码热重载特性的同时进行扩展,使代码在许多情况下仍然表现得像解释型语言。

首先,您需要创建一个 Rust 文件,我们将其命名为 hello_world.rs。可以通过以下 CLI 命令创建该文件:

Request

GET
/hello_world
python -m robyn --create-rust-file hello_world

然后,您可以打开该文件并开始编写 Rust 代码。例如,假设我们实现一个返回平方值的函数:

Request

GET
/hello_world
// hello_world.rs

// rustimport:pyo3

use pyo3::prelude::*;

#[pyfunction]
fn square(n: i32) -> i32 {
    n * n
    // 这是一个注释
}

每个通过 CLI 创建的 Rust 文件都会在文件顶部添加一个特殊注释,Robyn 会根据该注释确定需要导入的依赖项。在此例中,我们导入了 pyo3 包。您可以根据需要导入多个包,还可以从 crates.io 导入crates。例如,如果您希望使用 rusqlite 包,可以按如下方式导入:

Request

GET
/hello_world
// rustimport:pyo3

//:
//: [dependencies]
//: rusqlite = "0.19.0"

use pyo3::prelude::*;

#[pyfunction]
fn square(n: i32) -> i32 {
    n * n * n
    // 这是另一个注释
}

接下来,您可以在 Python 代码中导入并使用该 Rust 函数:

Request

GET
/hello_world
from hello_world import square

print(square(5))

要运行此代码,您需要使用 --compile-rust-path 标志来编译 Rust 代码并执行。同时,您还可以使用 --dev 标志监控 Rust 代码的变化,并在变化时即时重新编译:

Request

GET
/hello_world
python -m robyn --compile-rust-path "." --dev

以下是一个示例,展示了如何在 Robyn 应用中使用 Rust 文件,借助 rusqlite 包连接数据库并返回表中的行数:rusty-sql 示例项目

下一步

蝙蝠侠很好奇 Robyn 还能做什么。

Robyn 向他透露,这个框架还可以支持 GraphQL。

GraphQL 支持