Python 3.7+contextvarsпонятие
contextvars.Token
контекстные переменные
Объект, который возвращает ContextVar.set(): хранит прежнее значение и нужен, чтобы откатить его через reset().
Синтаксис
token = var.set(value); var.reset(token)
reset(token) возвращает переменной значение до set(), а если его не было — снова делает её пустой; простое set(old) так не умеет. Токен одноразовый: второй reset() даёт RuntimeError, а токен из другого контекста — ValueError. old_value равен Token.MISSING, если значения не было. С Python 3.14 токен — менеджер контекста: with var.set(x): откатывает значение сам.
Примеры
import contextvars
level = contextvars.ContextVar('level', default='info')
token = level.set('debug')
print(level.get()) # → debug
level.reset(token)
print(level.get()) # → info
try:
level.reset(token)
except RuntimeError:
print('токен уже использован') # → токен уже использован
# Python 3.14+
import contextvars
level = contextvars.ContextVar('level', default='info')
with level.set('debug'):
print(level.get()) # → debug
print(level.get()) # → info
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности