Какие инструменты Вы рекомендуете для профилирования и оптимизации кода?
В Python 3.3 есть функция time.perf_counter() для измерения прошедшего времени в сравнительном тесте. У нее лучшее доступное разрешение.
Тест должен выполняться несколько раз: три раза минимум, пять — более чем достаточно. Повторение теста заполняет кэш диска и процессора. Я предпочитаю поддерживать минимальное время; другие разработчики предпочитают среднее геометрическое.
Для микробенчмарков есть модуль timeit. Он прост в применении и дает быстрые результаты, но они не очень достоверны, если использовать настройки по умолчанию. Тесты придется повторять вручную, чтобы получить устойчивые результаты.
Оптимизация может занять много времени, поэтому лучше сразу сосредоточиться на самых ресурсоемких функциях. Для их поиска в Python есть модули cProfile и profile, фиксирующие время работы каждой функции.
Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию
·
Джульен Данжу