-
Python-Rust-benchmark
Discontinued Python vs Rust benchmark using a toy visual problem (linear algebra).
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
maturin
Build and publish crates with pyo3, cffi and uniffi bindings as well as rust binaries as python packages
-
Warframe-OCR
A relic inventory recognition system for Warframe, based on experimental Rust bindings to Tesseract OCR. Supports detection in real-time. Very much WIP.
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
got the same reaction for this project: https://github.com/Ismail-Maj/python-rust-benchmark Around 3000x faster too :)
I haven't done extensive comparisons, but my general experience is that if you are just working on something that can translate to looping over array elements, you can get excellent performance with cython or numba. It is likely on-par with rust performance if you can avoid creating a bunch of temporary/intermediate numpy arrays. I typically only reach for rust as a method for writing a python extension (e.g. using pyo3) if the problem involves more complicated data structures or dealing with json, xml or other file types and possibly instances where multi-threading is important. Even in the case of multi-threading, if there is a natural way to break up an array processing problem you can use cython or numba, release the GIL and then use the `concurrent.futures` module to distribute work. Also it's currently the case that pyo3 can have some performance overhead that you don't see with cython, for example https://github.com/PyO3/pyo3/issues/661
Thank you for the idea, opened a tracking issue in maturin: https://github.com/PyO3/maturin/issues/657
I don't like maturin workflow either because it installs directly to the python environment. This is not very useful during development. I wrote a module import file which loads the python module from the shared library. You could easily invoke cargo before importing the module (remember to delete the previous shared library file) to have a fully automated development processes.
This is also considered a good resource for exercises but I didn't try it: https://github.com/rust-lang/rustlings
I had the same experience but with Node.js and https://napi.rs
P.D: And my current dream is making a spiritual successor of FoxPro, in Rust!