Простой декоратор, чтобы узнать время выполнения функции

Хотите быстро проверить, сколько времени занимает выполнение какой-либо функции в проекте? Для этого можно использовать простейший декоратор. (Да, существует django-debug-toolbar, но этого примера достаточно, чтобы просто быстро проверить время выполнения)

def view_function_timer(prefix='', writeto=print):

    def decorator(func):
        @functools.wraps(func)
        def inner(*args, **kwargs):
            try:
                t0 = time.time()
                return func(*args, **kwargs)
            finally:
                t1 = time.time()
                writeto(
                    'View Function',
                    '({})'.format(prefix) if prefix else '',
                    func.__name__,
                    args[1:],
                    'Took',
                    '{:.2f}ms'.format(1000 * (t1 - t0)),
                    args[0].build_absolute_uri(),
                )
        return inner

    return decorator

Использовать это декоратор тоже очень просто:

from wherever import view_function_timer


@view_function_timer()
def homepage(request, thing):
    ...
    return render(request, template, context)

При выполнении функции получим что-то такое:

View Function  homepage ('valueofthing',) Took 23.22ms http://localhost:8000/home/valueofthing

 

Вернуться на верх