import contextvars contextvars.Context() # получение контекста context = contextvars.copy_context()
contextvars.ContextVar
на их значения (словароподобный объект).Объект Context
модуля contextvars
представляет собой отображение contextvars.ContextVar
на их значения (словароподобный объект).
Объект contextvars.Context()
создает пустой контекст без каких-либо значений в нем. Чтобы получить копию текущего контекста, используйте функцию contextvars.copy_context()
.
Контекст реализует интерфейс collections.abc.Mapping
.
Context.run()
- выполняет вызываемый объект в установленном контексте,Context.copy()
- неглубокая копия объекта контекста,var in Context
- проверка наличия переменной в контексте,Context[var]
- получение значения переменной из контекста,Context.get()
- получение значения переменной из контекста,Context.iter()
- итератор по переменным контекста,Context.len()
- количество переменных в контексте,Context.keys()
- список всех переменных контекста,Context.values()
- список всех значений контекста,Context.items()
- список переменных и их значений в контексте в виде (var, value)
.Context.run(callable, *args, **kwargs)
:Метод Context.run()
выполняет код callable(*args, **kwargs)
в объекте контекста, для которого вызывается метод Context.run()
. Возвращает результат выполнения или распространяет исключение, если оно произошло.
Любые изменения любых контекстных переменных, которые делает вызываемый объект callable
, будут содержаться в объекте контекста:
var = contextvars.ContextVar('var') var.set('spam') def main(): # 'var' был установлен в 'spam' перед вызовами # 'copy_context()' и 'ctx.run(main)', так: # var.get() == ctx[var] == 'spam' var.set('ham') # Теперь, после установки 'var' в 'ham': # var.get() == ctx[var] == 'ham' ctx = contextvars.copy_context() # Любые изменения, которые функция 'main()' # вносит в 'var', будут содержаться в 'ctx'. ctx.run(main) # Функция 'main()' была запущена в контексте 'ctx', # следовательно 'main()' исполниться с измененной 'var': # ctx[var] == 'ham' # Однако, за пределами контекста 'ctx', переменная # 'var' по-прежнему имеет значение 'spam': # var.get() == 'spam'
Метод вызывает ошибку RuntimeError
при вызове одного и того же объекта контекста из нескольких потоков ОС или при рекурсивном вызове.
Context.copy()
:Метод Context.copy()
возвращает неглубокую копию объекта контекста..
var in Context
:Проверка наличия переменной в объекте Context
возвращает True
Если в контексте установлено значение для переменной var
, в противном случае вернет False
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> var in ctx # True
Context[var]
:Операция Context[var]
производит извлечение значение переменной var
установленной в ContextVar
. Если переменная не задана в объекте Context
, то возникает ошибка KeyError
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> ctx[var] # 'spam'
Context.get(var[, default])
:Метод Context.get()
возвращает значение для переменной var
, если var
имеет значение в объекте контекста Context
. В противном случае вернет заданное значение default
. Если значение default
не задано, то вернет значение None
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> ctx.get(var) # 'spam'
iter(Context)
:Операция iter(Context)
возвращает итератор по переменным, хранящимся в объекте контекста Context
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> iter(ctx) # <keys object at 0x7f0fbfc92a90>
len(proxy)
:Операция len(proxy)
возвращает количество переменных, заданных в объекте Context
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> len(ctx) # 1
Context.keys()
:Метод Context.keys()
возвращает список всех переменных в объекте Context
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> list(ctx.keys()) # [<ContextVar name='var' at 0x7f0fbfc8e220>]
Context.values()
:Метод Context.values()
возвращает список значений всех переменных в объекте Context
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> list(ctx.values()) # ['spam']
Context.items()
:Метод Context.items()
возвращает список из кортежей (var, value)
, содержащих все переменные и их значения в объекте Context
.
>>> import contextvars >>> var = contextvars.ContextVar('var') >>> token = var.set('spam') >>> ctx = contextvars.copy_context() >>> list(ctx.items()) # [(<ContextVar name='var' at 0x7f0fbfc8e220>, 'spam')]