import timeit timeit.Timer(stmt='pass', setup='pass', \ timer=<timer function>, globals=None)
stmt='pass'
- проверяемый код,setup='pass'
- настройка кода,timer=<default timer>
- используемый таймер,globals=None
- область видимости.Timer
.Класс 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
.