Python是Agile开发的完美语言,在那里,要求可能会改变。
特别是如果你在创业,你需要 实验和改变的东西快。
然而,Python是一种被解释语言,在某些情况下可能需要比被解释语言所能提供的更快的性能.
在这些情况下一个常见的做法是使用python-对二进制绑定,其中二进制代码由Rust,C++,或Go来构建.
在文章中,我将探索对以"Rust"为基础的代码的约束.
捆绑是如何运作的 绑定背后的想法是:您在编译为二进制的语言中创建一个带有特定域的功能的模块,并把它建设为一个C相容的动态库(在Linux,macOS,在Windows上).
然后将一个 Python 包建为 Python 包并和动态库一起安装,允许您导入和使用将控制传递到动态库中相应函数的函数.
在某些情况下,可以使用类代替函数.
如果任何参数都是复杂的,它们必须在包装中被序列化并被传递到动态库中作为JSON字符串或作为一组单个原始参数.
基准试验 为了尝试这个 Python- Rust 的通讯, 我为一个读取一个大型 CSV 文件的实验编码, 并且根据指定的列索引, 新建一个复制件 。
这是一份3 MB CSV的档案, 上面有关于欧洲非政府组织的数据, 作为基准,文件被用Rust绑定比直接用Python处理快4.3x.
这是第一次浏览代码和结构的回波 关于Rust的几件事:Rust包是用Cargo建造的, 相当于pip, virtualenv,以及设置工具的组合。
单个包被称作"箱子",可以被发布到"箱子".io上,相当于PyPI.
要创建Python-to-Rust绑定,标准方法是将Rust的PyO3库与maturin一起使用,一个可安装为PyPI包的构建工具.
与Python或Go相比,rust语法并不是最方便开发者,但是有了今天的AI代理,大多数Python-native代码可以相当容易地移植到它上.
与C++相比,Rust和Go的优点是不需要低水平管理内存或直接与指针合作.
软件包结构 常见的文件结构可以是: 一旦代码准备好,您用: 这可以构建Python软件包并安装到当前的虚拟环境中.
也可以为您的特定操作系统制造出轮子 。
Rust in Django在开发Django网站时,最大的瓶颈通常不是语言本身,而是连接数据库,文件系统或对象存储,以及API.
然而,在需要处理大量数据或进行更重的计算的情况下,使用二进制而不是Python是有道理的. orjson库,和上面所建的DRF渲染器如django-orjson或drf-orjson-render,都是这方面的好例子——与Python-native执行相比,Rust提高了JSON2-10x的建造速度或解析速度.
使用 Rust 替换的最好地方是背景任务,管理命令,模板解析(参见实验 django-rusty-templates),偶尔也可以查看或中间软件.
最终的单词So Python本身就足够了,特别是在代码可读性和开发速度方面.
然而,在需要的时候,某些零件只需将它们重写为Python-Rust捆绑就可以被提升到2到10x.
只要记住,当涉及到从数据库或Elasticsearch中获取的数据来查看时,后处理——比如在Python或Rust中重新排序——就是一种反派;而是直接在查询中这样做.
最后,记住,与Rust一起建造的大楼需要额外的依赖和主干