🚀
Лестница оптимизации PythonВсе знают, что Python медленный. Но мало кто знает, на какой «ступеньке» пора остановиться, чтобы не тратить недели на оптимизацию того, что и так работает.
Разработчик провел масштабный бенчмарк (март 2026) на Apple M4 Pro и составил «лестницу» инструментов.
Оказалось, что дело не только в GIL. Главный виновник — максимальная динамичность. На каждый
a + b Python должен спросить: «Что такое a? Что такое b? Есть ли у них метод add? Не подменили ли его секунду назад?». В итоге обычное число в C занимает 4 байта, а в Python — 28 байт «обвязки».
🪜 Ступени лестницы (от простого к сложному):
1. Обновите CPython (Уровень: Легко)• Профит: до 1.4x (переход с 3.10 на 3.11+).
• Цена: Смена версии в Dockerfile.
• Нюанс: 3.14t (без GIL) в однопотоке чуть медленнее из-за накладных расходов на атомарные операции.
2. Альтернативные рантаймы (PyPy, GraalPy)• Профит: 6x – 66x.
• Цена: Просто запустить код другим интерпретатором.
• Нюанс: Совместимость с C-библиотеками (pandas, numpy) может быть кривой.
3. Mypyc (Компиляция типов)• Профит: 2.4x – 14x.
• Цена: Написать нормальные Type Annotations.
• Нюанс: Отлично работает, если ваш код и так проходит строгую проверку mypy.
4. Numba (@njit)• Профит: 50x – 135x.
• Цена: Один декоратор и перевод данных в массивы NumPy.
• Нюанс: Идеально для тяжелых математических циклов.
5. Cython (Путь джедая)• Профит: до 124x (уровень нативного C).
• Цена: Знание C и борьба с «минным полем» (например,
x ** 0.5 в Cython может быть в 40 раз медленнее, чем `sqrt(x)`).
6. Новая волна (Mojo, Codon, Taichi)• Профит: до 198x.
• Цена: Сырые инструменты, отсутствие колес (wheels) под новые версии Python. Mojo — это вообще новый язык "в шкуре" Python.
7. Rust (PyO3)• Профит: 113x – 154x.
• Цена: Изучение Rust.
• Главный плюс: Не чистая скорость, а «владение данными». Rust может распарсить JSON в свои структуры, вообще не создавая медленные Python-словари.
Стеклянный потолок: Словари и JSONЕсли ваша задача — гонять JSON (как в реальном мире), то Cython и Rust дадут лишь 4x-6x профита, пока вы используете стандартный
json.loads().
Золотое правило: Потолок скорости в вебе — это создание Python-объектов. Если хотите реального рывка, нужно уходить от dict и парсить данные сразу в C-структуры или Rust-типы.
Полный отчет и код бенчмарков: https://clc.to/NgPptA📍 Навигация:
Вакансии •
Задачи •
Собесы🐸
Библиотека питониста#буст