Профилирование и оптимизация приложений Python
Профилирование
Базовые инструменты
Их хватает в 80% случаев, чтобы ответить на вопросы: есть ли проблема и где она примерно расположена?
import time
:- можно замерять время выполнения функций или обработки задач; я написал свой декоратор;
- Нужно быть аккуратнее с асинхронными вызовами. Таймер на корутине может отработать быстро и потом ещё долго будет выполняться I/O.
- Измерять можно не только callee, но и его caller.
htop
— используется для мониторинга системных ресурсов:htop
: верхняя часть. Нажмите на изображение для увеличения.htop
: нижняя часть. Нажмите на изображение для увеличения.- Утилиты Docker, например:
docker stats
,docker top
, см. здесь.
Утечки памяти
-
memory_profiler
. Импортируешь → добавляешь декоратор@profile
к функции или методу → запускаешь приложение → смотришь построчный отчет с инкрементом по RAM → можно добавить еще дебаггер → по возможности оптимизируешь код. Удобный и полезный инструмент. - The Python Profilers:
cProfile
,profile
.