Измерение времени выполнения функции в Python

Как измерить время выполнения функции в Python

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

Использование модуля time

Одним из наиболее прямых способов измерить время выполнения функции в Python является использование модуля time. Приведем пример его использования:

import time

def my_func():
    for _ in range(1000000):
        pass

start_time = time.time()
my_func()
end_time = time.time()

print(f"Функция выполнилась за {end_time - start_time} секунд.")

Функция time.time() возвращает текущее время в секундах, прошедшее с начала эпохи (обычно это 00:00 1 января 1970 года).

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

Функция time.perf_counter() представляет собой более точную альтернативу time.time(). Она измеряет время с максимально возможной точностью для вашей платформы.

import time

def my_func():
    for _ in range(1000000):
        pass

start_time = time.perf_counter()
my_func()
end_time = time.perf_counter()

print(f"Функция выполнилась за {end_time - start_time} секунд.")

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

Функция time.process_time() измеряет время процессора, вместо реального времени. Это может быть полезно для измерения времени выполнения функции, которое не зависит от других процессов в системе.

import time

def my_func():
    for _ in range(1000000):
        pass

start_time = time.process_time()
my_func()
end_time = time.process_time()

print(f"Функция выполнилась за {end_time - start_time} секунд.")

Использование модуля timeit

Модуль timeit в Python предоставляет мощный и гибкий способ измерения времени выполнения небольших фрагментов кода. Он предназначен для избежания некоторых общих ловушек при измерении времени выполнения.

import timeit

def my_func():
    for _ in range(1000000):
        pass

execution_time = timeit.timeit(my_func, number=1000)
print(f"Функция выполнилась за {execution_time} секунд.")

Функция timeit.timeit() принимает два аргумента: функцию для выполнения и количество раз, которое нужно выполнить эту функцию.

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

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

import time

def timer_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.perf_counter()
        result = func(*args, **kwargs)
        end_time = time.perf_counter()
        print(f"Функция {func.__name__} выполнилась за {end_time - start_time} секунд.")
        return result
    return wrapper

@timer_decorator
def my_func():
    for _ in range(1000000):
        pass

my_func()

Заключение

Измерение времени выполнения функции в Python — важный навык для любого разработчика. Будь то простое использование модуля time, использование функций с большей точностью, таких как time.perf_counter(), или более сложные инструменты, такие как модуль timeit и декораторы, Python предлагает множество вариантов для решения этой задачи. Использование этих инструментов может помочь вам сделать ваш код более эффективным и быстрым.

Содержание: