Сообщить об ошибке.

Класс Timer() модуля timeit в Python

Измерение производительности кода

Синтаксис:

import timeit

timeit.Timer(stmt='pass', setup='pass', \
             timer=<timer function>, globals=None)

Параметры:

  • stmt='pass' - проверяемый код,
  • setup='pass' - настройка кода,
  • timer=<default timer> - используемый таймер,
  • globals=None - область видимости.

Возвращаемое значение:

Описание:

Класс Timer() модуля timeit предназначен для измерения скорости выполнения небольших фрагментов кода.

Конструктор класса принимает аргумент заявления stmt, которое будет измерено и дополнительный аргумент setup, используемый для настройки выполнения заявления stmt, а так же функцию таймера timer. Оба оператора по умолчанию имеют значение pass.

Функция таймера timer зависит от платформы, дополнительно смотрите документацию к вашей OS и модуль time.

Аргументы stmt и setup также могут содержать несколько операторов, разделенных ';' или переводы строк, если они не содержат многострочных строковых литералов.

Выражение, переданное в stmt по умолчанию будет выполняться в пространстве имен timeit. Этим поведением можно управлять, передавая пространство имен в аргумент globals.

Чтобы измерить время выполнения выражения stmt, используйте метод Timer.timeit(). Методы Timer.repeat() и Timer.autorange() являются вспомогательными методами для вызова tit.timeit() несколько раз.

Время выполнения кода настройки setup исключается из общего времени запуска.

Параметры stmt и setup также могут принимать объекты, которые можно вызывать без аргументов. Это встроит вызовы в них в функцию таймера, которая затем будет выполнена методом Timer.timeit(). Обратите внимание, что временные издержки в этом случае немного больше из-за дополнительных вызовов функций.

Методы объекта Timer.


Timer.timeit(number=1000000):

Метод Timer.timeit() возвращает время выполнения основного выражения stmt. Метод выполняет выражение настройки setup один раз, а затем возвращает время, необходимое для выполнения основного выражения number количество раз, измеренное в секундах как число с плавающей запятой. Аргумент number - это число раз в цикле, по умолчанию равное одному миллиону. Основное выражение stmt, выражение настройки setup и функция таймера передаются в конструктор класса timeit.Timer().

Примечание. По умолчанию метод Timer.timeit() во время выполнения временно отключает сборку мусора. Преимущество этого подхода в том, что он делает независимые тайминги более сопоставимыми. Недостатком является то, что GC может быть важным компонентом производительности измеряемой функции. Если это так, то GC может быть повторно включен в качестве первого оператора в строке установки.

>>> import timeit
>>> timeit.Timer('for i in range(10): oct(i)', 'gc.enable()').timeit()
# 0.7002408580010524

Timer.autorange(callback=None):

Метод Timer.autorange() автоматически определяет, сколько раз нужно вызвать метод Timer.timeit().

Это удобная функция, которая вызывает Timer.timeit() несколько раз, так что общее время >= 0.2 секунд и возвращая возможное количество циклов, время, затраченное на это количество циклов. Вызывает метод Timer.timeit() с возрастающими числами из последовательности 1, 2, 5, 10, 20, 50,… до тех пор, пока время не станет не менее 0,2 секунды.

Если обратный вызов callback задан и не равен None, то он будет вызываться после каждого испытания с двумя аргументами:

callback(number, time_taken)

Timer.repeat(repeat=5, number=1000000):

Метод Timer.repeat() вызывает метод Timer.timeit() несколько раз.

Это удобная функция, которая вызывает метод Timer.timeit() несколько раз, возвращая список результатов. Первый аргумент repeat указывает, сколько раз вызывать метод Timer.timeit(). Второй аргумент number указывает число циклов выполнения проверяемого кода.

Примечание. Это не очень полезно. В типичном случае самое низкое значение дает нижнюю границу для того, насколько быстро ваша машина может выполнить данный фрагмент кода. Более высокие значения в векторе результатов, как правило, вызваны не изменчивостью скорости Python, а другими процессами, влияющими на точность синхронизации. Таким образом, min() результата, вероятно, является единственным числом, которое вас должно заинтересовать. После этого вы должны смотреть на весь вектор и применять здравый смысл, а не статистику.

Timer.print_exc(file=None)

Метод Timer.print_exc() помощник для печати трассировки из временного кода.

Типичное использование:

t = Timer(...)
try:
    # или t.repeat(...)
    t.timeit(...)
except Exception:
    t.print_exc()

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

Примеры: