Сообщить об ошибке.

Объект Context модуля contextvars в Python

Синтаксис:

import contextvars

contextvars.Context()

# получение  контекста
context = contextvars.copy_context()

Параметры:

  • нет

Возвращаемое значение:

  • отображение contextvars.ContextVar на их значения (словароподобный объект).

Описание:

Объект Context модуля contextvars представляет собой отображение contextvars.ContextVar на их значения (словароподобный объект).

Объект contextvars.Context() создает пустой контекст без каких-либо значений в нем. Чтобы получить копию текущего контекста, используйте функцию contextvars.copy_context().

Контекст реализует интерфейс collections.abc.Mapping.


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')]