Одноразовые и многоразовые контекстные менеджеры в Python отличаются возможностью повторного использования. 14
Одноразовые менеджеры контекста можно использовать только один раз. 14 Они должны создаваться заново каждый раз, когда применяются. 14 Попытка использовать их во второй раз вызовет исключение или приведёт к некорректной работе. 14
Многоразовые менеджеры контекста, в отличие от одноразовых, поддерживают многократное использование. 1 Однако они не будут работать, если экземпляр контекстного менеджера уже использовался в операторе with. 1
Примеры одноразовых контекстных менеджеров: файлы (первый оператор with закрывает файл, предотвращая дальнейшие операции ввода-вывода) и менеджеры, созданные с использованием contextmanager(). 14
Примеры многоразовых контекстных менеджеров: threading.RLock (можно использовать в нескольких операторах with и внутри оператора with, который уже использует тот же менеджер контекста) и ExitStack (вызывает все зарегистрированные обратные вызовы при выходе из любого оператора with). 1