Python·100 вопросов

Как профилировать Python-код?

Ответ

Профилирование Python-кода — это необходимый этап оптимизации производительности, позволяющий точно определить узкие места, из-за которых приложение работает медленно или потребляет слишком много оперативной памяти. Главное золотое правило оптимизации звучит так: сначала всегда измеряй реальные показатели с помощью профилировщиков, и только потом оптимизируй код, а не занимайся преждевременными улучшениями «на глаз».

Для общего анализа производительности приложения и поиска самых медленных функций стандартно применяется встроенный модуль cProfile. Он собирает статистику о количестве вызовов каждой функции и затраченном на них времени, выводя результаты в консоль или сохраняя их в бинарный файл для дальнейшей визуализации с помощью сторонних утилит. Если вам нужно измерить скорость выполнения очень коротких фрагментов кода или отдельных выражений, лучше всего использовать функцию timeit, которая запускает код множество раз и вычисляет среднее время выполнения.

Когда общая картина ясна, но требуется понять, какая именно строка внутри большой функции забирает больше всего ресурсов, на помощь приходит сторонняя библиотека line_profiler. Она позволяет построчно проанализировать время выполнения кода, предварительно разметив нужную функцию специальным декоратором. Для анализа работающих приложений в реальном времени прямо на продакшене без необходимости внедрять код или перезапускать сервисы отлично подходит инструмент py-spy, работающий на уровне операционной системы.

Используя эти инструменты в комплексе, вы сможете системно подходить к ускорению своих программ, находя реальные причины замедления и точечно улучшая архитектуру.

Полезен ли этот ответ?

Другие вопросы этой темы

Связанные вопросы из других тем