Модуль timeit

Последнее обновление: 25.02.2025

Модуль 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.

Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850