# Created on savesnippets.com ยท https://savesnippets.com/0xxoeBLAmtgG6w import functools import logging import time log = logging.getLogger(__name__) def timed(fn): @functools.wraps(fn) def wrapper(*args, **kwargs): start = time.perf_counter() try: return fn(*args, **kwargs) finally: ms = (time.perf_counter() - start) * 1000 log.info("%s took %.2f ms", fn.__qualname__, ms) return wrapper @timed def expensive(n: int) -> int: return sum(i * i for i in range(n)) expensive(1_000_000) # INFO expensive took 47.31 ms