There’s huge pressure on Python at the moment to get faster, ideally without changing at all. One increasingly–popular way of achieving that impossible task is to push the performance critical code down into C, C++, or Rust. And this week we’re focussing on the Python route, as we take a look at PyO3.
David Hewitt’s the principal committer to PyO3, and he joins us to go through the easy parts, the hard parts, and the works in progress, giving us an insight into how Python and Rust work under the hood, and quite how much work it takes to make them work as one.
–
Become a Supporter on Patreon: https://patreon.com/DeveloperVoices
Become a Supporter on YouTube: https://www.youtube.com/@DeveloperVoices/join
PyO3 User Guide: https://pyo3.rs/v0.22.0/
PyO3 on Github: https://github.com/PyO3/pyo3
Polars: https://pola.rs/
Tokio: https://tokio.rs/
Trio: https://trio.readthedocs.io/
Robyn: https://github.com/sparckles/Robyn
Faster CPython: https://github.com/faster-cpython
Maturin: https://www.maturin.rs/
David on Mastodon: https://fosstodon.org/@davidhewitt
David on Twitter: https://x.com/davidhewittdev
Kris on Mastodon: http://mastodon.social/@krisajenkins
Kris on LinkedIn: https://www.linkedin.com/in/krisjenkins/
Kris on Twitter: https://x.com/krisajenkins
--
0:00 Intro
3:09 How David Got Involved in PyO3
7:01 So Starting With Python To C...
9:20 Taking That To Rust
17:37 Calling Rust from Python
20:54 Understanding PyO3's Place In The Stack
21:52 Memory Safety
30:37 Rust's Lifetimes
35:07 Applying Lifetimes to Python Code
38:24 Let's Get Into Error Handling
55:55 The Performance Cost
1:01:19 Threading
1:16:05 David's Motivations
1:19:22 Supporting Python's Sub-Interpreters
1:24:14 The Limits of Compile-Time Guarantees
1:27:32 Getting Started with PyO3
1:33:01 Outro