Python
Декоратор для замера времени выполнения
Оборачивает функцию и логирует, сколько она работала. functools.wraps сохраняет имя и docstring.
Код
import functools
import logging
import time
logger = logging.getLogger(__name__)
def timed(func):
"""Логировать время выполнения функции."""
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
try:
return func(*args, **kwargs)
finally:
elapsed = time.perf_counter() - start
logger.info("%s выполнена за %.3f с", func.__qualname__, elapsed)
return wrapper
@timed
def slow_sum(n):
return sum(range(n))
slow_sum(1_000_000)