Если вы работаете с большими наборами данных, как я, или если в любом другом случае ваш код Python требует много времени для выполнения, вам надоест ждать его завершения. :(

Не ждите…!!!

Что, если в написанном вами коде есть лазейки, которые вы можете просто исправить, чтобы сделать его эффективным. Единственное ожидание - это потому, что вы все время не знали, где ваш код ждет.

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

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

Python cProfile - это функция профилирования, предоставляемая официальной документацией Python для разработчиков, позволяющая проверять внутреннее выполнение программы.

Документация по профилированию Python 2 доступна по адресу https://docs.python.org/2/library/profile.html.

Документация по профилированию Python 3 доступна по адресу https://docs.python.org/3.2/library/profile.html.

Это обеспечивает подробный вывод о времени выполнения, используемом каждым методом в вашей программе, как показано ниже.

Кроме того, если вы используете PyCharm в качестве IDE, он предоставляет очень красивый пользовательский интерфейс, предоставляющий детали выполнения вашей программы. Чтобы запустить вашу программу в режиме профилирования, используйте параметр запуска профиля в PyCharm IDE, как указано ниже.

Я покажу вам, как я использовал профилирование для оптимизации своего кода. На изображениях ниже показаны два снимка статистики профилирования моего кода до и после оптимизации.

Вы можете видеть, что функция get_sim до оптимизации занимает 225 секунд, а после оптимизации - всего 10 секунд. Перед оптимизацией кода я вычислял схожесть двух строк при каждом вызове этой функции. Поскольку это казалось узким местом, я сохранил уже рассчитанные сходства строк в словаре, что, в свою очередь, дало мне резкое повышение производительности. (Но словарь со временем пополняется в памяти. Это всегда компромисс;))

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

Удачи с профилированием…. !!! ^ _ ^