Tame it коды
Когда дело доходит до измерения времени выполнения фрагмента кода Python, у нас есть много идей. Как насчет простого использования модуля времени и экономии времени до и после выполнения программы? Звучит легко и хорошо, но это не так.
Когда программа выполняется, также запускаются многие фоновые процессы, чтобы сделать этот код исполняемым. Модуль времени не учитывает эти процессы. Если вам нужны точные измерения производительности времени, то модуль timeit – это то, что вам нужно.
Модуль timeit в Python запускает кусок кода 1 миллион раз (значение по умолчанию) и учитывает минимальное количество времени, которое потребовалось для запуска этого фрагмента кода. Давайте посмотрим, как работает модуль здесь.
СодержаниеОпределение времени
Есть много способов использовать модуль timeit. Один из самых простых способов – использовать его непосредственно в CLI. Мы сделаем это в нашем первом примере, прежде чем перейти к другим примерам.
Пример
Мы начнем с использования модуля timeit непосредственно из интерфейса командной строки Python. Когда используется CLI, мы заметим, что модуль сам определяет количество повторений, выполняемых для одного и того же фрагмента кода. Вот примеры команд, которые мы выполнили для разных выражений:
Посмотрим на результат этой программы:
Выбор времени для фрагмента кода
Самое лучшее в модуле timeit – это то, что мы можем выбрать точный фрагмент кода, для которого мы хотим измерить производительность. Мы определим код установки и код для проверки производительности отдельно. Код установки запускается только один раз, тогда как основной код запускается 1 миллион раз:
Посмотрим на результат этой программы:
Обратите внимание, что лучше всего сохранить операторы импорта в самом коде установки, чтобы не вносить никаких изменений при выполнении основного кода.
Время записи для многострочного кода из CLI
Если создание сценария для вас неосуществимо и вы хотите быстро проверить код на его производительность, также можно использовать код непосредственно из интерфейса командной строки:
Посмотрим на результат этой программы:
Обычно сравнивают два блока кода
Если вам нужна действительно простая идея, сравнивая два фрагмента кода о том, насколько быстро один прогон формирует другой, есть довольно простой способ сделать это:
Просто используйте функцию default_timer(), чтобы запустить время и снова, чтобы найти для нее разницу. Это самый простой способ использовать модуль для определения производительности кода. Это также заставляет вас делать свой код в виде функций, которые являются модульными объектами.
Функция timeit() модуля timeit возвращает время, необходимое для выполнения основного выражения number количество раз. Для этого создает экземпляр timeit.Timer() с заданным выражением stmt , кодом настройки setup и функцией таймера timer и запускает его метод Timer.timeit() с заданным number числом выполнений в цикле.
Необязательный аргумент globals указывает пространство имен для выполнения кода выражения stmt .
Параметры stmt и setup также могут принимать объекты, которые можно вызывать без аргументов. Обратите внимание, что временные издержки в этом случае немного больше из-за дополнительных вызовов функций.
Примеры:
Сравнение производительности трех различных выражений.
Чтобы предоставить модулю timeit доступ к определенным функциям в коде, можно передать параметр настройки, который содержит оператор импорта:
Другой вариант - передать функцию globals() аргументу globals , что приведет к выполнению кода в текущем глобальном пространстве имен. Это может быть удобнее, чем указание импорта:
Читайте также: