前 言
Rust是一门令人兴奋的新语言。它为开发人员提供了没有垃圾收集机制的内存安全,从而带来了快速的运行和低内存占用。但是,用Rust重写一切可能是昂贵和有风险的,因为Rust中可能没有对要解决的问题的包支持。这就是Python绑定和pip的用武之地。本书将使开发人员能够用Rust编写可以使用pip安装的模块,这样就能够在需要的时候注入Rust,而不需要承担重写整个系统的风险和工作量。这种方法使开发人员能够在Python项目中尝试和使用Rust。
本书读者
想用Rust加快代码运行速度的Python开发人员,或者想在不承担太多风险或工作量的情况下尝试Rust的开发人员,都会从本书中受益。读者不需要有Rust的背景。本书介绍了Rust,并使用Python实例让读者快速掌握Rust。
内容介绍
本书分为3篇,共11章。具体内容介绍如下。
* 第1篇为“了解Rust”,包括第1~3章。
> 第1章为“从Python的角度认识Rust”,介绍了有关Rust的基础知识,重点阐释了Python和Rust之间的区别,以帮助Python开发人员快速了解 Rust,并给出了相关的Python实例,以帮助开发人员掌握Rust概念。
> 第2章为“使用Rust构建代码”,解释了如何在多个页面上构造Rust程序,并使用包管理工具来组织和安装依赖项。
> 第3章为“理解并发性”,介绍了线程和进程的概念,演示了如何在Rust中运行多线程和多进程。该章还介绍了Python中的并发性,以帮助开发人员了解其中的差异。
* 第2篇为“融合Rust和Python”,包括第4~8章。
> 第4章为“在Python中构建pip模块”,讨论了如何构建可以使用pip安装的Python包,还演示了如何在GitHub上托管软件包,以及配置持续集成等。
> 第5章为“为pip模块创建Rust接口”,介绍了如何将Rust代码注入pip模块,并使用Rust设置工具来编译和使用Python中的Rust代码。
> 第6章为“在Rust中使用Python对象”,考虑了另一个方向上的兼容,即在Rust中接受和处理Python数据结构并与之交互。该章还讨论了如何在Rust中创建自定义Python对象。
> 第7章为“在Rust中使用Python模块”,介绍了如何在Rust代码中使用诸如NumPy之类的Python模块。
> 第8章为“在Rust中构建端到端Python模块”,将所有已经讨论的内容打包成一个用Rust编写的功能齐全的Python包。这个包拥有Python接口和命令行功能,可以接受YAML文件进行配置。
* 第3篇为“将Rust注入Web应用程序”,包括第9~11章。
> 第9章为“构建Python Flask应用程序”,构建了一个带有PostgreSQL数据库、NGINX负载均衡器和Celery工作进程的Python Flask应用程序,以使Rust技能更加实用。所有项目都被包裹在Docker中,为将Rust注入Web应用程序打下基础。
> 第10章为“将Rust注入Python Flask应用程序”,讨论了如何利用第9章中构建的Web应用,将Rust模块注入Celery工作进程和Flask应用程序的Docker容器。该章还印证了已经应用的迁移,以自动生成数据库的模式,这样Rust代码就可以直接与数据库连接。此外,该章还介绍了如何使用来自私有GitHub存储库的Rust包。
> 第11章为“集成Rust的最佳实践”,给出了一些提示,说明在为Python编写Rust代码时如何避免常见的错误。
充分利用本书
建议读者了解Python并能适应面向对象编程。本书将涉及一些高级主题,如元类,但不是必不可少的。Rust编程、Python Web应用程序和使用pip安装的Python模块等都在 本书中有所涉及。
本书涵盖的软件和操作系统需求如表P.1所示。
表P.1 本书涵盖的软件和操作系统需求
本书涵盖的软件 操作系统需求 Python 3 Windows、macOS或Linux Rust Windows、macOS或Linux Docker Windows、macOS或Linux PyO3 Windows、macOS或Linux Redis Windows、macOS或Linux PostgreSQL Windows、macOS或Linux 建议读者自己输入代码或从本书的GitHub存储库访问代码(下文将提供链接) ,以避免与复制和粘贴代码相关的任何潜在错误。
下载示例代码文件
本书随附的代码可以在GitHub存储库中找到,其网址如下:
https://github.com/PacktPublishing/Speed-up-your-Python-with-Rust
如果代码有更新,也将在该GitHub存储库中更新。
下载彩色图像
本书提供了一个PDF文件,其中包含本书中使用的屏幕截图/图表的彩色图像。可通过以下地址下载。
https://static.packt-cdn.com/downloads/9781801811446_ColorImages.pdf
本书约定
本书中使用了许多文本约定。
(1)表示文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄等的段落示例如下:
2019年,芯片巨头英伟达(NVIDIA)公司的联合创始人兼首席执行官黄仁勋(Jensen Huang)表示,随着芯片组件越来越接近单个原子的大小,它变得越来越难以跟上摩尔定律的步伐,因此可以宣布摩尔定律已经死亡。有关详细信息,可访问:
https://www.cnet.com/news/
moores-law-is-dead-nvidias-ceo-jensen-huang-says-at-ces-2019/
(2)有关代码块的设置如下所示。
use std::error::Error;
use std::fs::File;
use csv;
use super::structs::FootPrint;
(3)任何命令行输入或输出都采用如下所示的粗体代码形式。
pip install git+https://github.com/maxwellflitton/flitton-fib-rs@main
(4)术语或重要单词采用中英文对照形式,在括号内保留其英文原文。示例如下:
当代码编译时,它将为栈(stack)中的不同变量分配内存;当代码运行时,它会将数据存储在堆(heap)中。
(5)界面词汇或专有名词将保留英文原文,在括号内添加其中文翻译。示例如下:
首先需要将PyPI账户的用户名和密码存储在GitHub存储库的Secrets(秘密)部分。这可以通过单击Settings(设置)选项卡,然后选择左侧边栏上的Secrets(秘密)选项来完成。
(6)本书使用了以下两个图标。
表示警告或重要的注意事项。
表示提示或小技巧。
·VIII·
Python高效编程—基于Rust语言
·VII·
前 言
