TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5045 473
Как измерять время async-функции через декоратор

Обычная обёртка может вызвать async-функцию и получить объект корутины за микросекунды. Это ещё не время запроса: выполнение корутины начнётся позже, а исключение возникнет уже за пределами обёртки.

В разборе async-декораторов обёртка сама объявлена через async def. Она сохраняет время старта, выполняет return await fn(*args, **kwargs), а запись длительности помещает в finally.

Так измерение охватывает выполнение и очистку при ошибке или отмене. functools.wraps сохраняет метаданные и связь wrapped для интроспекции. Сам сборщик метрик тоже должен быть аккуратным: его ошибка в finally способна перекрыть исходное исключение, а блокирующий ввод-вывод задержит весь event loop.

#python #asyncio
More from @zen_of_python
  1. Oct 10, 2026Почему max_workers не ограничивает очередь задач ThreadPoolExecutor(max_workers=8) разреша…
  2. Oct 10, 2026Чего не проверяет runtime_checkable Protocol Protocol позволяет описать небольшой интерфей…
  3. Oct 9, 2026Как добавить MCP-сервер в Django-проект django-mcpz позволяет зарегистрировать Python-функ…
  4. Oct 9, 2026Как дождаться обработки очереди asyncio Пустая очередь ещё не означает, что работа законче…
  5. Oct 9, 2026Почему frozendict не замораживает вложенные объекты В Python 3.15 появляется встроенный fr…
  6. Oct 8, 2026Почему цикл внутри теста скрывает часть ошибок Тест перебирает десять входов и проверяет р…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →