Aller au contenu principal
Python vers Rust : 30k lignes migrées, chiffres bruts
Retour au blog
Technique

Python vers Rust : 30k lignes migrées, chiffres bruts

Patrice Huetz11 avril 20266 min

En novembre 2025, j'ai pris une décision que 6 mois plus tard me fait encore hésiter : migrer un projet perso de 30 000 lignes de Python vers Rust. Le projet : un pipeline d'ingestion qui lit 12 GB de logs par jour, parse, enrichit, écrit dans une DB. Le Python fonctionnait, mais saturait mon VPS. Le Rust devait être 5-10× plus rapide. Après 6 semaines de migration + 4 mois de prod, voici les chiffres bruts.

Le projet et le pourquoi

🔒

Soutenez mon travail sur Patreon

Accès anticipé aux articles, contenu exclusif, et la satisfaction de soutenir un auteur indépendant.

Rejoindre — à partir de 3€/mois

Le pipeline tournait sur un VPS 4 vCPU / 16 GB pour 22 € /mois. Python + asyncio + SQLAlchemy + Pydantic. Il consommait 70% du CPU en moyenne, et pendant les pics d'ingestion, il tombait à 95-98% avec de l'accumulation de lag. J'aurais pu upgrader le VPS (44 € pour un 8 vCPU) mais j'avais envie de tester Rust en vrai.

Objectif : même code, même résultat, moins de CPU. Espoir secret : pouvoir downgrader le VPS et économiser 5-10 €/mois.

Les 6 semaines de migration

Semaine 1 — Apprentissage + setup

Je connaissais Rust « en lecture » mais je n'avais jamais livré de code en prod. Semaine d'onboarding : The Rust Book (10h), cargo new, setup CI, premier commit. Productivité réelle : 5% de la cible.

Semaines 2-3 — Parser + modèles

La partie la plus facile. Lire des logs et les parser. Rust brille ici : serde pour la désérialisation, types stricts, performances imbattables. 8 000 lignes Python → 4 200 lignes Rust. Factor de compression : 1,9×.

Mais le temps mis : 2 fois plus long qu'en Python parce que je me battais avec le borrow checker sur des structures imbriquées.

Semaines 4-5 — Pipeline + DB

Intégration SQLx (Postgres async en Rust). Là, ça se corse. Les relations DB dans Rust sont plus verbeuses qu'avec SQLAlchemy. J'ai passé 2 jours entiers sur une erreur lifetime que je n'ai toujours pas vraiment comprise (j'ai workaround avec un Box::leak).

18 000 lignes Python → 12 000 lignes Rust.

Semaine 6 — Tests + déploiement

Écrire les tests en Rust. cargo test est excellent. Déploiement : un binaire cargo build --release de 18 MB, zero dépendance runtime. SCP sur le VPS, systemd service, terminé.

Temps total migration : 6 semaines réelles. Temps estimé original : 3 semaines. Dérapage : 100%.

Les chiffres en prod (4 mois)

Python vs Rust — ressources prod
Python vs Rust — ressources prod
MétriquePython (avant)Rust (après)
CPU moyen70%8%
CPU pic98%22%
RAM moyenne4,2 GB380 MB
Latence p50 (ingest)14 ms1,2 ms
Latence p99 (ingest)180 ms4 ms
Throughput (events/s)8 40047 000
Binary sizeN/A (Python 95 MB deps)18 MB
Temps de démarrage3,4 s40 ms

La perf est folle. CPU ×9 moins utilisé, RAM ×11 moins, latence ×12 plus basse, throughput ×5,6. Je pouvais donc downgrader mon VPS de 4 vCPU à 2 vCPU (10 € /mois) et économiser 12 €/mois.

Mais. Est-ce que c'est rentable ?

Le coût réel de la migration

  • 6 semaines × 30h/semaine = 180 heures de travail concentré
  • À mon taux horaire moyen (75 €/h) : 13 500 € de coût opportunité
  • Économie VPS : 12 €/mois × 60 mois (5 ans) = 720 €
  • Ratio : 5,3% de retour sur investissement sur 5 ans

Sur ce critère seul, la migration est une catastrophe financière. Même si je compte zéro maintenance (ce qui est faux), je perds ~12 780 € sur 5 ans pour économiser quelques euros par mois de VPS.

Mais l'argent n'est pas tout

Ce que le ROI ne capture pas :

  1. 1.J'ai appris Rust en prod — expérience réelle qui vaut pour d'autres projets
  2. 2.Le code est plus fiable — 0 crash en 4 mois vs 2 crashs en 6 mois de Python (problèmes de types à runtime)
  3. 3.Les mises à jour sont trivialescargo update, rebuild, redeploy. Contre les cauchemars pip install sur un venv corrompu
  4. 4.La maintenance mentale est plus simple — le code Rust force des choix explicites que Python laissait à l'intuition

Donc : mauvais ROI financier, bon ROI technique et personnel.

Les 5 surprises

Surprise 1 : le compilateur est ton meilleur ami

Tout ce qu'on entend sur le borrow checker est vrai — c'est brutal. Mais une fois que ça compile, ça marche. 90% des bugs que j'aurais eu en Python ne passent même pas la compilation Rust. C'est un gain qualitatif invisible dans les métriques.

Surprise 2 : l'écosystème async est fragmenté

Tokio vs async-std, streams manuels, problèmes de Send + Sync, Pin<Box<dyn Future>>. L'async en Rust est encore moins mature qu'en Python. J'ai passé 6 jours juste sur des erreurs async.

Surprise 3 : le tooling est exceptionnel

cargo, clippy, rustfmt, cargo-edit, cargo-watch. Tout est uniforme, rapide, bien documenté. Le tooling Python (pip, poetry, black, ruff, etc.) paraît soudain archaïque.

Surprise 4 : AI assistance plus faible

Claude Code est moins bon en Rust qu'en Python. Il propose souvent du code qui ne compile pas à cause de subtilités de lifetimes ou de traits. J'ai dû manuellement corriger ~30% de ses suggestions. En Python c'est plutôt 10%.

Surprise 5 : le deploy est un rêve

Un binaire statique, 18 MB, qui tourne n'importe où. Pas de pip install, pas de venv, pas de conflicts de dépendances. Rust gagne le déploiement sans compétition.

Ma recommandation après 6 mois

Cas d'usagePython ou Rust ?
Script one-offPython — 10× plus rapide à écrire
Pipeline MLPython — écosystème imbattable
Backend API B2BRust si perf critique, Python sinon
Outil CLI distribuéRust — le deploy est un rêve
Pipeline de données haute perfRust si ça en vaut le coup financièrement
Project perso d'apprentissageRust — tu apprendras énormément
💡
Ne migre pas un projet Python vers Rust pour les perfs si tu peux juste upgrader ton VPS. Fais-le si tu veux apprendre Rust **et** que tu as 6 semaines devant toi.
⚠️
Le Rust ne divise pas juste ton CPU par 10 — il divise aussi ta vélocité par 2-3 au début. Budgétise le coût temps, pas juste le coût hardware.

Ce qu'il faut retenir

  1. 1.Performance réelle : CPU ÷9, RAM ÷11, throughput ×5,6 sur mon workload.
  2. 2.Coût réel : 180h de travail pour 720 € d'économie sur 5 ans — ROI financier négatif.
  3. 3.Rust gagne sur le déploiement et la fiabilité de compilation.
  4. 4.L'async Rust est encore immature — 6 jours perdus dessus.
  5. 5.Claude Code est moins bon en Rust qu'en Python — prévois plus de corrections manuelles.

Pour le workflow Ralph Loop que j'ai utilisé pendant cette migration avec Claude Code, j'ai écrit un livre dédié :

La Boucle Ralph
La Boucle Ralph

Guide Pratique du Coding Autonome par IA.

Découvrir →
🔒

Soutenez mon travail sur Patreon

Accès anticipé aux articles, contenu exclusif, et la satisfaction de soutenir un auteur indépendant.

Rejoindre — à partir de 3€/mois

Commentaires

Chargement des commentaires...

Laisser un commentaire