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

Используйте perf_counter() при входе и выходе из контекстного менеджера, а вывод поместите в finally. Формат .3f покажет секунды с тремя знаками после запятой, то есть до миллисекунд.

Короткий ответ

Что ответить на собеседовании

Используйте perf_counter() при входе и выходе из контекстного менеджера, а вывод поместите в finally. Формат .3f покажет секунды с тремя знаками после запятой, то есть до миллисекунд.

Подробный разбор

Ответ с пояснениями

Условие

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

  • При входе в блок with необходимо запустить таймер.
  • При выходе из блока with следует вычислить прошедшее время и вывести его.
  • Результат выводится в секундах с точностью до миллисекунды.

Ответ

Используйте perf_counter() при входе и выходе из контекстного менеджера, а вывод поместите в finally. Формат .3f покажет секунды с тремя знаками после запятой, то есть до миллисекунд.

Вариант через contextmanager:

from contextlib import contextmanager
from time import perf_counter

@contextmanager
def timer():
    started = perf_counter()
    try:
        yield
    finally:
        print(f'{perf_counter() - started:.3f} s')

with timer():
    total = sum(range(1000))

Измеряется прошедшее время, включая ожидания, а не только CPU. Исключение внутри with не подавляется; таймер выводится и при ошибке. Три знака форматирования не означают, что длительность любой операции измеряется с абсолютной точностью в миллисекунду.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее