Питонячьи радости: pyinstrument.
tldr: лучший существующий CPU-профайлер для питона.
В мире питона с профайлерами всё не очень просто.
Есть суровый дедовский способ профилирования через import time.
Есть встроенный cProfile.
Есть какой-нибудь scalene.
Есть yappi, Austin, py-spy, line_profiler, pprofile - десятки их.
Достаточно приличная табличка-сравнение разных профайлеров есть в репе scalene.
Оставим тему профилирования памяти пока что (там всё ещё хуже), и остановимся на CPU-профайлерах.
Раньше я пользовался line_profiler и немножечко страдал, потому что в процентах 80% моих питоновских проектов есть асинки, а работа асинков достаточно сильно насилует стек, в результате чего результаты профилирования асинхронщины были абсолютно нечитаемы.
Узнал про scalene - но тогда, когда я пытался его применить, он дичайше глючил и не выдавал ничего полезного.
Хотя описание и задумка там хорошая, но что-то не пошло.
И вот pyinstrument. Простой, как топор, и удобный, как дедов гамак.
Надо профилировать скрипт или модуль? Пожалуйста.
Или тесты? Без проблем.
Произвольный кусок кода? Вперед.
Интеграция в Ipython? Да.
Нативный middleware для django? Не знаю, кому он может понадобиться, но есть.
Готовые сниппеты для Flask/FastAPI (безумно удобный)/Falcon? Прямо в доке лежат.
Вывести результат в консоль? Есть.
HTML-ка? Есть. Удобная, кстати!
speedscope.app? В наличии.
Человеческая обработка асинков? Без проблем, всё работает само и из коробки.
В общем, для 95-98% всех задач, где мне надо что-либо профилировать, его хватает с головой.
5% на случаи, когда очень нужно смотреть перф построчно, а не по функциям.
Post #219
1.89K