· 3 min de lectura · Por Grover Cordova

Cómo migrar de Python a Rust sin reescribir tu aplicación

Mantén Python donde aporta y lleva a Rust solo el código que limita tu rendimiento, usando PyO3 y maturin.

No necesitas elegir entre Python y Rust. Casi siempre conviene usar los dos: Python para orquestar y Rust para las pocas rutas donde se concentra el costo.

Herramientas como Polars, Ruff y uv siguen esta idea: se usan desde el ecosistema de Python, con un núcleo escrito en Rust.

1. Mide antes de migrar

Rust no arregla un problema que no has localizado. Perfila tu aplicación con carga real, usando una herramienta como py-spy, y busca funciones de CPU que dominen el tiempo total.

Si el tiempo se va esperando a la base de datos o a la red, Rust no ayudará mucho. Corrige primero las consultas, los índices o la arquitectura.

2. Elige una función pequeña y pura

El mejor primer candidato tiene tres rasgos:

  • Consume mucha CPU.
  • Tiene entradas y salidas simples.
  • Tiene pruebas, o es fácil escribírselas.

Parsers, validadores, transformaciones de datos y cálculos numéricos suelen encajar bien.

3. Exponla como un módulo de Python

Pythontu aplicaciónPyO3Rustsolo lo crítico
Una frontera pequeña y clara: es lo único que ambos lados deben acordar.

PyO3 permite escribir extensiones nativas, y maturin las empaqueta. Desde Python, se importa como cualquier otro módulo:

use pyo3::prelude::*;

#[pyfunction]
fn total_centavos(montos: Vec<i64>) -> i64 {
    montos.iter().sum()
}

#[pymodule]
fn nucleo(m: &Bound<'_, PyModule>) -> PyResult<()> {
    m.add_function(wrap_pyfunction!(total_centavos, m)?)?;
    Ok(())
}
import nucleo

nucleo.total_centavos([1250, 800, 4300])

Cruzar la frontera entre Python y Rust también cuesta tiempo, porque se convierten datos. Por eso es mejor pasar lotes de trabajo que llamar a Rust una vez por cada elemento en un bucle.

4. Verifica la equivalencia

Ejecuta la versión antigua y la nueva con las mismas entradas y compara los resultados. En producción, puedes correr ambas en paralelo durante un tiempo y usar solo la antigua para responder, hasta tener confianza.

5. Decide si seguir

Compara el resultado con la métrica que definiste al inicio. Si la mejora justifica el costo, pasa al siguiente componente. Si no, detente: una migración parcial que resuelve el problema ya es un buen resultado.

Construye mejor software.

Seguridad, eficiencia y oficio, con fuentes y en español.