Python 3.7+contextvarsпонятие
contextvars.Context
контекстные переменные
Отображение ContextVar → значение; метод run() исполняет функцию внутри этого контекста.
Синтаксис
ctx = contextvars.Context(); ctx.run(callable, *args, **kwargs)
Context() создаёт пустой контекст — в нём переменные видят только свои default, а не текущие значения; снимок текущего даёт copy_context(). Изменять отображение напрямую нельзя: ctx[var] = x не работает, значения меняются только set() внутри run(). Один и тот же контекст нельзя войти дважды одновременно — вложенный ctx.run() того же ctx даёт RuntimeError.
Примеры
import contextvars
lang = contextvars.ContextVar('lang', default='ru')
lang.set('en')
print(contextvars.Context().run(lang.get)) # → ru — пустой контекст
print(contextvars.copy_context().run(lang.get)) # → en
ctx = contextvars.Context()
try:
ctx.run(ctx.run, lang.get)
except RuntimeError:
print('уже внутри этого контекста') # → уже внутри этого контекста
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности