Профилирование и оптимизация приложений 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.