Book Image

Speed Up Your Python with Rust

By : Maxwell Flitton
5 (2)
Book Image

Speed Up Your Python with Rust

5 (2)
By: Maxwell Flitton

Overview of this book

Python has made software development easier, but it falls short in several areas including memory management that lead to poor performance and security. Rust, on the other hand, provides memory safety without using a garbage collector, which means that with its low memory footprint, you can build high-performant and secure apps relatively easily. However, rewriting everything in Rust can be expensive and risky as there might not be package support in Rust for the problem being solved. This is where Python bindings and pip come in. This book will help you, as a Python developer, to start using Rust in your Python projects without having to manage a separate Rust server or application. Seeing as you'll already understand concepts like functions and loops, this book covers the quirks of Rust such as memory management to code Rust in a productive and structured manner. You'll explore the PyO3 crate to fuse Rust code with Python, learn how to package your fused Rust code in a pip package, and then deploy a Python Flask application in Docker that uses a private Rust pip module. Finally, you'll get to grips with advanced Rust binding topics such as inspecting Python objects and modules in Rust. By the end of this Rust book, you'll be able to develop safe and high-performant applications with better concurrency support.
Table of Contents (16 chapters)
1
Section 1: Getting to Understand Rust
5
Section 2: Fusing Rust with Python
11
Section 3: Infusing Rust into a Web Application

What this book covers

Chapter 1, An Introduction to Rust from a Python Perspective, covers the basics of Rust to enable Rust development. Relevant Python examples are given to help you grasp the Rust concepts examined.

Chapter 2, Structuring Code in Rust, explains how to structure Rust programs over multiple pages and use package management tools to organize and install dependencies.

Chapter 3, Understanding Concurrency, covers how to multithread and multiprocess in Rust, seeing as Rust has "fearless concurrency." We also cover concurrency in Python to see the differences.

Chapter 4, Building pip Modules in Python, sees us build Python packages that can be installed using pip. It also covers how packages can be hosted privately on GitHub.

Chapter 5, Creating a Rust Interface for Our pip Module, has us inject Rust into our pip module and use the Rust setup tools to compile and use the Rust code in our Python code.

Chapter 6, Working with Python Objects in Rust, considers how compatibility does not just go in one direction. In this chapter, we take in Python objects and interact with them. We also create Python objects in Rust.

Chapter 7, Using Python Modules in Rust, builds on the previous chapter and sees us use Python modules such as NumPy in our Rust code.

Chapter 8, Structuring an End-to-End Python Module in Rust, sees us wrapping up everything that has been covered into a fully functioning Python package written in Rust. This package has Python interfaces and command-line functionality that accepts YAML files for configuration.

Chapter 9, Structuring a Python Flask App for Rust, has us build a Python Flask app with a PostgreSQL database, NGINX load balancer, and Celery worker in order to get more practical with our Rust skills. All of this is wrapped in Docker to prepare us for injecting Rusk into all of these aspects of the web application.

Chapter 10, Injecting Rust into a Python Flask App, covers how to take the web application that we built in the previous chapter and inject our Rust modules into the Docker containers for the Celery worker and Flask application. We also imprint the migrations that have already been applied to automatically generate a schema of the database so our Rust code can directly connect with the database.

Chapter 11, Best Practices for Integrating Rust, concludes the book with some tips on how to avoid common mistakes as you continue to write Rust code for Python.