TGViewer
Zen of Python Zen of Python @zen_of_python · 18.9K subscribers
Post #4925 1.87K
В стандартной библиотеке 3.15 появился профилировщик, который цепляется к работающему процессу по PID

Профиль с прода снять обычно нечем: profiling.tracing инструментирует каждый вызов функции и заметно тормозит программу, а перезапускать сервис ради замера никто не даст. Из-за этого «тормозит в бою, на стенде не воспроизводится» годами оставалось без ответа.

В Python 3.15 добавили profiling.sampling, он же Tachyon: семплирующий профилировщик, который периодически снимает стеки уже запущенного процесса. Код менять не нужно, перезапускать не нужно, накладные расходы околонулевые. Частота семплирования — до 1 000 000 Гц, на момент добавления это самый быстрый семплирующий профилировщик для Python.

🔘 куда целиться: attach по PID к живому процессу, run — скрипт с самого старта, run -m — модуль, dump — одноразовый снимок стеков всех потоков, чтобы понять, на чём висит зависший процесс (с --async-aware — по всем задачам asyncio);
🔘 что мерить: --mode wall по умолчанию считает календарное время вместе с ожиданием ввода-вывода, --mode cpu — только счёт, --mode gil показывает, какой поток держит GIL, --mode exception берёт пробы только с потоков с активным исключением;
🔘 форматы вывода: --pstats, --collapsed для FlameGraph и speedscope, --flamegraph — самодостаточный HTML на D3.js, --gecko для Firefox Profiler, --heatmap — построчная тепловая карта по файлам;
🔘 есть живой TUI в духе top через --live и профилирование до уровня байткода через --opcodes.

Авторы — Пабло Галиндо и Ласло Кишш Коллар. Раздел в What's New описывает все режимы; финал 3.15 ожидается в октябре, сейчас доступен rc1.

@zen_of_python
  • ❤ 7
More from @zen_of_python
  1. Sep 20, 2026Как collections.deque хранит элементы блоками У deque два конца, поэтому легко представить…
  2. Sep 20, 2026Что ускоряет django-msgspec в Django и где он расходится с json django-msgspec заменяет ко…
  3. Sep 20, 2026Почему миллион чисел в Python занимает 35 МБ Список из миллиона целых, которые помещаются…
  4. Sep 19, 2026Как перевести Python-сервер MCP с FastMCP на SDK 2.x Свежая установка зависимостей сломала…
  5. Sep 19, 2026Как кэшировать методы чужого Python-клиента Если библиотечный клиент нельзя менять, его ме…
  6. Sep 19, 2026Где заканчивается ускорение NumPy и что выбрать дальше Векторизация выполняет цикл низкоур…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →