Профилирование — это процесс измерения производительности программы:
Цель профилирования — найти узкие места (bottlenecks), чтобы оптимизировать код.
Не буду писать сюда все варианты профилирования, потому что в презе этого нет. Мы использовали вот такие функции (можешь глянуть мой файлик chim1-2 - это все, что мы юзали на первом семинаре, дальше вообще тыкали только timeit):
%time sum(range(2000)) - Однократное измерение времени выполнения выражения. Полезно для быстрого замера, но не очень точно, так как результат может зависеть от фоновой нагрузки.
%timeit sum(range(2000)) - Множественное измерение (по умолчанию: 7 повторов по 1 млн итераций или адаптивно) — средняя и надёжная оценка времени выполнения.
%%time (перед ячейкой кода), %%timeit (перед ячейкой кода) - это и следующую применяли к тем же функциям, но расписанным циклом, поэтому юзали штучку, которая считает всю ячейку
%prun slow_sum(100,10000) - Запускает встроенный профилировщик cProfile на одну строку (или функцию), и выводит статистику по вызовам функций. Полезно для анализа, где тратится больше всего времени. Показывает количество вызовов, время в функции, суммарное время с учётом подфункций
а еще устанавливали такую штуку:
pip install line-profiler
%load_ext line_profiler
%lprun -f slow_sum slow_sum(1000,10000) - Показывает время выполнения каждой строки функции. Очень точный для локального анализа производительности