Модуль timeit предназначен для работы с таймерами. Ключевой функцией этого модуля является функция timeit(), которая вычисляет времея выполнения определенного действия (функция):
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
Функция принимает следующие параметры:
stmt: действие(функция), выполнение которой надо измерить. По умолчанию это pass
setup: код, который запускается перед запуском stmt. По умолчанию он также равен pass. Обычно применяется для импорта модулей, необходимых для выполнения нашего кода.
timer: запускаемый таймер в виде объекта timeit.Timer. Обычно он имеет некоторое разумное значение по умолчанию, поэтому обычно этот параметр оставляют по умолчанию
number: количество выполнений stmt, которое надо измерить. По умолчанию действие stmt выполняется 1000000.
globals: устанавливает пространство имен, в котором выполняется код
В качестве результата функция возвращает время выполнения действия в секундах.
Рассмотрим небольшой пример:
import timeit # модуль для работы с таймерами
# тестируемая функция - вычисляет сумму чисел от 1 до 10000
def sum():
result = 0
for i in range(10000):
result +=i
return result
# Функция timeit.timeit возвращает время выполнения функции в секундах
# Первый параметр представляет выполняемую функцию
# Параметр number указывает на число выполнений. По умолчанию равен 1000000
# В нашем случае выполняем функцию sum 100 раз
execution_time = timeit.timeit(lambda: sum(), number=100)
print("Время выполнения функции sum:", execution_time)
В данном случае выполняемое действие, которое мы хотим измерить, представляет лямбда-выражение, которое запускает функцию sum. Это определенная в коде функция, которая вычисляет сумму чисел от 1 до 10000. Кроме того, устанавливаем параметр number в 100, то есть
измеряем 100 выполнений функции sum.
Результат функции помещаем в переменную execution_time и выводим ее значение на консоль. В итоге получится что-то вроде следующего:
eugene@Eugene:$ python3 app.py Время выполнения функции sum: 0.01668926700222073
В примере выше измеряемое действие представляет лямбда-выражение, которое запускает кастомную функцию. Есть и другие способы установки измеряемого действия. Например, в виде строки:
import timeit # код, выполнение которого измеряем action = "10+12" print(timeit.timeit(action))
Здесь измеряем время выполнения кода "10+12". Поскольку параметр number не установлен, то код выполняется 1000000 раз.
Если код содержит несколько инструкций, то они отделяютсчя точкой с запятой:
import timeit action = "a=10; b=12; a+b" print(timeit.timeit(action))
Однако если код содержит несколько больше инструкций, в том числе более сложных как условные или циклические конструкции, то можно определить весь код в тройные кавычки:
import timeit
action = '''
def sum():
result = 0
for n in range(100):
result += n
return result
'''
print(timeit.timeit(action))
Здесь измеряем выполнение функции sum, которая вычисляет сумму чисел от 0 до 100. В качестве альтернативы также можно определить действие в виде отдельной функции, как это было сделано в первом примере в данной статье.
Если выполняемая функция находится в каком-то другом модуле, то ее надо импортировать. Для этого в параметр setup надо передать выражение импорта модуля/функции. Например, в модуле "test"
располагается функция sum_test(). Для ее выполнения можно настроить функцию следующим образом:
import timeit my_action = "sum_test()" my_setup = "from test import sum_test" print(timeit.timeit(my_action, setup=my_setup))
Для измерения времени функция timeit() использует таймер в виде объекта типа timeit.Timer:
class timeit.Timer(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
Конструктор класса принимает те же параметры, что и функция timeit. И для получения таймера по умолчанию для текущей платформы Python предоставляет функцию timeit.default_timer(). Пример использования:
import timeit
def sum():
result = 0
for n in range(100):
result += n
return result
start = timeit.default_timer()
print("Start time:", start)
sum()
print("Execution time:", timeit.default_timer() - start)
С помощью функции timeit.default_timer() получаем начальное и конечное время и затем получаем время выполнения функции sum.