Тип, предоставляющий возможность управления контекстом исполнения.
Управляющий контекстом (он же менеджер) следит за инициализацией и финализацией данного контекста, в частности определяет действия которые должны происходить до и после выполнения блока кода.
Обычно используется совместно с инструкцией
with, позволяющей выполнение описанного в ней блока в некотором контексте исполнения. Однако не возбраняется и прямое обращение к методам менеджера.
Менеджеры контекста часто используются в задачах сходных с:
- сохранением и восстановлением глобального состояния;
- блокировкой и разблокировкой ресурсов;
- открытием и закрытиям файлов.
В сущности, признаком принадлежности к типу является следование
протоколу контекстного менеджера, характеризующемуся наличием реализаций упользовательского типа двух методов:
На заметку
В стандартной поставке Python имеются встроенные менеджеры контекста для таких задач как: синхронизация нитей, закрытие файлов и других объектов, упрощенное управление контекстом десятичной арифметики. См. модуль
contextlib.
Удобным инструментом для реализации протокола менеджера являются
генераторы и декоратор
contextlib.contextmanager
. Если функцию-генератор обернуть в данный декоратор, то вместо
итератора вернётся менеджер контекста, с уже определёнными методами
__enter__()
и
__exit__()
.