Как узнать время работы программы python

Этот модуль предоставляет простой способ синхронизировать небольшие фрагменты кода Python. Он имеет как интерфейс командной строки , так и вызываемый . Это позволяет избежать ряда распространенных ловушек для измерения времени выполнения. См. также введение Тима Питерса в главу «Алгоритмы» во втором издании Python Cookbook , опубликованном O’Reilly.

Basic Examples

В следующем примере показано, как можно использовать интерфейс командной строки для сравнения трех разных выражений:

$ python3 -m timeit ‘»-«.join(str(n) for n in range(100))’ 10000 loops, best of 5: 30.2 usec per loop $ python3 -m timeit ‘»-«.join([str(n) for n in range(100)])’ 10000 loops, best of 5: 27.5 usec per loop $ python3 -m timeit ‘»-«.join(map(str, range(100)))’ 10000 loops, best of 5: 23.2 usec per loop

Этого можно достичь из интерфейса Python с помощью:

>>> import timeit >>> timeit.timeit(‘»-«.join(str(n) for n in range(100))’, number=10000) 0.3018611848820001 >>> timeit.timeit(‘»-«.join([str(n) for n in range(100)])’, number=10000) 0.2727368790656328 >>> timeit.timeit(‘»-«.join(map(str, range(100)))’, number=10000) 0.23702679807320237

Вызываемый объект также может быть передан из интерфейса Python :

Простой способ замерить скорость работы кода в python


>>> timeit.timeit(lambda: «-«.join(map(str, range(100))), number=10000) 0.19665591977536678

Однако обратите внимание, что timeit() автоматически определит количество повторений только при использовании интерфейса командной строки. В разделе « Примеры » вы можете найти более сложные примеры.

Python Interface

Модуль определяет три функции удобства и публичный класс:

timeit.timeit(stmt=’pass’, setup=’pass’, timer=, number=1000000, globals=None)

Создайте экземпляр Timer с данным оператором, кодом настройки и функцией таймера и запустите его timeit() с выполнением числа . Необязательный аргумент globals указывает пространство имен, в котором следует выполнить код.

Изменено в версии 3.5: добавлен необязательный параметр globals .

timeit.repeat(stmt=’pass’, setup=’pass’, timer=, repeat=5, number=1000000, globals=None)

Создайте экземпляр Timer с заданным оператором, кодом настройки и функцией таймера и запустите его метод repeat() с заданным количеством повторений и количеством выполнений. Необязательный аргумент globals указывает пространство имен, в котором следует выполнить код.

Изменено в версии 3.5: добавлен необязательный параметр globals .

Изменено в версии 3.7: Значение повтора по умолчанию изменено с 3 на 5.

timeit.default_timer()

Таймер по умолчанию, которым всегда является time.perf_counter() .

Изменено в версии 3.3: time.perf_counter() теперь является таймером по умолчанию.

class timeit.Timer(stmt=’pass’, setup=’pass’, timer=, globals=None)

Класс для временной скорости выполнения небольших фрагментов кода.

Конструктор принимает оператор для определения времени, дополнительный оператор, используемый для настройки, и функцию таймера. Оба утверждения по умолчанию равны ‘pass’ ; функция таймера зависит от платформы (см. строку документа модуля). stmt и setup также могут содержать несколько операторов, разделенных ; или символы новой строки, если они не содержат многострочных строковых литералов. Оператор по умолчанию будет выполняться в пределах пространства имен timeit; этим поведением можно управлять, передавая пространство имен в глобальные переменные .

Как узнать время выполнения программы? #python #программирование

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

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

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

Читайте также:
Краткое описание детских игровых программ

Изменено в версии 3.5: добавлен необязательный параметр globals .

timeit(number=1000000)

Время число казней основного утверждения. Он выполняет оператор настройки один раз, а затем возвращает время, необходимое для выполнения основного оператора несколько раз, измеряемое в секундах как число с плавающей запятой. Аргумент — это количество проходов цикла, по умолчанию — один миллион. Конструктору передаются основной оператор, оператор настройки и функция таймера.

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

timeit.Timer(‘for i in range(10): oct(i)’, ‘gc.enable()’).timeit()
autorange(callback=None)

Автоматически определять, сколько раз вызывать timeit() .

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

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

Новинка в версии 3.6.

repeat(repeat=5, number=1000000)

Вызовите timeit() несколько раз.

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

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

Изменено в версии 3.7: Значение повтора по умолчанию изменено с 3 на 5.

print_exc(file=None)

Помогите распечатать трассировку из временного кода.

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

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

Command-Line Interface

При вызове программы из командной строки используется следующая форма:

python -m timeit [-n N] [-r N] [-u U] [-s S] [-h] [statement . ]

Там,где понимаются следующие варианты:

сколько раз выполнить ‘statement’

сколько раз повторить таймер (по умолчанию 5).

оператор, который будет выполнен один раз изначально ( pass умолчанию )

измерять время процесса, а не время настенных часов, используя time.process_time() вместо time.perf_counter() , которое используется по умолчанию

Новинка в версии 3.3.

указать единицу времени для вывода таймера; можно выбрать nsec , usec , msec или sec

Новинка в версии 3.5.

распечатать необработанные результаты по времени;повторить для большей точности разрядов

распечатать короткое сообщение об использовании и выйти

Многострочный оператор можно задать, указав каждую строку как отдельный аргумент оператора; Строки с отступом возможны путем заключения аргумента в кавычки и использования ведущих пробелов. Аналогично обрабатываются параметры с несколькими -s .

Читайте также:
Какой выбрать ноутбук для работы с графическими программами

Если -n не указано, подходящее количество циклов вычисляется путем увеличения чисел из последовательности 1, 2, 5, 10, 20, 50, … до тех пор, пока общее время не составит не менее 0,2 секунды.

default_timer() измерения default_timer () могут влиять другие программы, работающие на той же машине, поэтому лучше всего, когда необходимо точное время, повторить его несколько раз и использовать лучшее время. Для этогоподходит опция -r ; 5 повторений по умолчанию, вероятно, будет достаточно в большинстве случаев. Вы можете использовать time.process_time() для измерения процессорного времени.

Выполнение оператора pass связано с определенными базовыми накладными расходами.Приведенный здесь код не пытается скрыть его,но вы должны знать о нем.Базовые накладные расходы можно измерить,вызвав программу без аргументов,и они могут отличаться в разных версиях Python.

Examples

Можно предоставить оператор установки,который в начале выполняется только один раз:

$ python -m timeit -s ‘text = «sample string»; char = «g»‘ ‘char in text’ 5000000 loops, best of 5: 0.0877 usec per loop $ python -m timeit -s ‘text = «sample string»; char = «g»‘ ‘text.find(char)’ 1000000 loops, best of 5: 0.342 usec per loop

В выводе есть три поля.Счетчик циклов,который показывает,сколько раз тело оператора было запущено за одно повторение цикла синхронизации.Количество повторений («лучший из 5»),которое говорит о том,сколько раз был повторен цикл синхронизации,и,наконец,время,которое в среднем заняло тело оператора в лучшем повторении цикла синхронизации.То есть время самого быстрого повторения делится на количество циклов.

>>> import timeit >>> timeit.timeit(‘char in text’, setup=’text = «sample string»; char = «g»‘) 0.41440500499993504 >>> timeit.timeit(‘text.find(char)’, setup=’text = «sample string»; char = «g»‘) 1.7246671520006203

То же самое можно сделать с помощью класса Timer и его методов:

>>> import timeit >>> t = timeit.Timer(‘char in text’, setup=’text = «sample string»; char = «g»‘) >>> t.timeit() 0.3955516149999312 >>> t.repeat() [0.40183617287970225, 0.37027556854118704, 0.38344867356679524, 0.3712595970846668, 0.37866875250654886]

В следующих примерах показано, как синхронизировать выражения, содержащие несколько строк. Здесь мы сравниваем стоимость использования hasattr() и try / except проверки отсутствующих и присутствующих атрибутов объекта:

$ python -m timeit ‘try:’ ‘ str.__bool__’ ‘except AttributeError:’ ‘ pass’ 20000 loops, best of 5: 15.7 usec per loop $ python -m timeit ‘if hasattr(str, «__bool__»): pass’ 50000 loops, best of 5: 4.26 usec per loop $ python -m timeit ‘try:’ ‘ int.__bool__’ ‘except AttributeError:’ ‘ pass’ 200000 loops, best of 5: 1.43 usec per loop $ python -m timeit ‘if hasattr(int, «__bool__»): pass’ 100000 loops, best of 5: 2.23 usec per loop
>>> import timeit >>> # атрибут отсутствует >>> s = «»» . try: . str.__bool__ . except AttributeError: . pass . «»» >>> timeit.timeit(stmt=s, number=100000) 0.9138244460009446 >>> s = «if hasattr(str, ‘__bool__’): pass» >>> timeit.timeit(stmt=s, number=100000) 0.5829014980008651 >>> >>> # атрибут присутствует >>> s = «»» . try: . int.__bool__ . except AttributeError: . pass . «»» >>> timeit.timeit(stmt=s, number=100000) 0.04215312199994514 >>> s = «if hasattr(int, ‘__bool__’): pass» >>> timeit.timeit(stmt=s, number=100000) 0.08588060699912603

Чтобы предоставить модулю timeit доступ к определяемым вами функциям, вы можете передать параметр настройки, который содержит оператор импорта:

def test(): «»»Stupid test function»»» L = [i for i in range(100)] if __name__ == ‘__main__’: import timeit print(timeit.timeit(«test()», setup=»from __main__ import test»))

Другой вариант , чтобы пройти globals() в глобал параметр, который заставит код , который будет выполняться в рамках текущего глобального пространства имен. Это может быть удобнее, чем индивидуальное указание импорта:

Читайте также:
Какие программы нужны для ноутбука после покупки

def f(x): return x**2 def g(x): return x**4 def h(x): return x**8 import timeit print(timeit.timeit(‘[func(42) for func in (f,g,h)]’, globals=globals()))

Python 3.11

time-Доступ ко времени и преобразования

Этот модуль предоставляет различные функции,связанные с временем.
Константы часового пояса
Эти константы используются в качестве параметров для clock_getres()и clock_gettime().
Графические пользовательские интерфейсы с Tk
Tk/Tcl уже давно является неотъемлемой частью Python.
tkinter-интерфейс Python для Tcl/Tk

Исходный код:Lib/tkinter/__init__.py Интерфейс пакета tkinter»)-это стандартный набор инструментов для создания графических интерфейсов на языке Python для Tcl/Tk.

Источник: runebook.dev

Как определить время работы программы на Python

Теперь нам надо создать программу, у меня это обычный цикл for.

for i in range(10000):

Данная функция просто выводит цифру от 1 до 9999 по порядку.
Далее в переменную start включаем метод time.time — этот метод возвращает число секунд, прошедших с начала эпохи.

start = time.time()
fun()
end = time.time()

Далее вызываем функцию. И теперь уже в переменную end включаем метод time.time

result = end — start
print(‘программа завершена за ‘, «%.2f» %result)

Из переменной end вычитаем start что-бы узнать время работы программы, а далее просто выводим.

import time

for i in range(10000):

start = time.time()

end = time.time()

result = end — start

print(‘программа завершена за ‘, «%.2f» %result)

Вот какой результат нас будет ждать:

Источник: dzen.ru

Функции таймера в Python

Функции таймера в Python

  1. Использование функции time.time() в Python
  2. Использование функции time.Process_time() в Python
  3. Использование функции time.Perf_counter в Python
  4. Использование функции time.monotonic() в Python

Python — очень обширный язык программирования, который очень широко используется во всем мире. Программисты создают множество программ, требующих значительного количества строк кода Python. Чтобы отслеживать и анализировать эти коды в зависимости от времени выполнения, мы можем использовать функции таймера Python.

Модуль time здесь наиболее важен, так как он содержит все функции, которые помогают следить за временем и анализировать его.

В этом руководстве мы обсудим различные функции таймера Python с использованием модуля времени.

Использование функции time.time() в Python

Эта функция возвращает время в секундах. Это секунды, прошедшие после эпохи — 1 января 1970 года, 00:00:00 (UTC). Эта функция использует время, установленное компьютерной системой, чтобы вернуть результат, то есть количество секунд.

import time start = time.time() for r in range(1,20000): pass end = time.time() print(format(end-start))

Между start и end идет основная часть кода. Здесь в качестве примера взят цикл for .

3.252345085144043

Обратите внимание, что output, то есть секунды, является значением с плавающей запятой.

Использование функции time.Process_time() в Python

Эта функция возвращает время в долях секунды. В функции также записывается привязка ко времени всего процесса, а не только время, прошедшее во время процесса.

from time import process_time, sleep start = process_time() for r in range(20): print(r, end=» «) end = process_time() print(end, start) print(end-start)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 10.756645 10.75523 0.0014150000000014984

Время, затраченное в time.sleep() , не измеряется этой функцией, что означает, что она измеряет только разницу во времени между двумя последовательными ссылками на время.

Использование функции time.Perf_counter в Python

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru