tgoop.com/PythonPortal/4512
Last Update:
Использование контекстного менеджера как таймера
Большинство разработчиков ассоциируют контекстные менеджеры (with-выражение) только с работой с файлами. Но на самом деле этот паттерн решает более общую задачу.
Контекстные менеджеры идеально подходят для управления любыми ресурсами, у которых есть чёткий момент начала и завершения. Например:
• File I/O
• Сессии логирования
• Транзакции в базе данных
• Сетевые и БД-соединения
• Замер производительности
• Управление потоками и блокировкамиwith
гарантирует, что инициализация и очистка ресурса будут выполнены автоматически, даже если в блоке возникнет исключение. Это делает код чище и надёжнее.
Вместо того чтобы вручную замерять время до и после блока кода, можно использовать контекстный менеджер — это чистое и питоничное решение.
Обычно контекстный менеджер реализуется как класс с методами __enter__
и __exit__
Но есть более лаконичный способ — использовать декоратор @contextmanager
из модуля contextlib, чтобы писать генераторные менеджеры без лишнего шаблонного кода.
Пример как использовать контекстный менеджер как таймер прикрепил