Перейти к содержанию

Профилирование и оптимизация приложений Python

Профилирование

Базовые инструменты

Их хватает в 80% случаев, чтобы ответить на вопросы: есть ли проблема и где она примерно расположена?

  1. import time:
    1. можно замерять время выполнения функций или обработки задач; я написал свой декоратор;
    2. Нужно быть аккуратнее с асинхронными вызовами. Таймер на корутине может отработать быстро и потом ещё долго будет выполняться I/O.
    3. Измерять можно не только callee, но и его caller.
  2. htop — используется для мониторинга системных ресурсов:
    htop: верхняя часть. Нажмите на изображение для увеличения.
    htop: нижняя часть. Нажмите на изображение для увеличения.
  3. Утилиты Docker, например: docker stats, docker top, см. здесь.

Утечки памяти

  1. memory_profiler. Импортируешь → добавляешь декоратор @profile к функции или методу → запускаешь приложение → смотришь построчный отчет с инкрементом по RAM → можно добавить еще дебаггер → по возможности оптимизируешь код. Удобный и полезный инструмент.
  2. The Python Profilers: cProfile, profile.

Что дальше?

  1. Нашли эту статью полезной? Поделитесь ею и помогите распространить знания!
  2. Нашли ошибку или есть идеи 💡 о том, что и как я могу улучшить? Напишите мне в Telegram.
  3. Хотите узнать обо мне больше? Читайте здесь.