Python Glossary English

Python 3.7+contextvarsфункция

contextvars.copy_context()

контекстные переменные

Возвращает снимок текущего контекста — объект Context со значениями всех контекстных переменных на этот момент.

Синтаксис

ctx = contextvars.copy_context()

Это копия, а не ссылка: изменения после копирования в снимок не попадают, а set() внутри ctx.run() остаётся в снимке и наружу не выходит. Копирование дешёвое (неизменяемое отображение), именно так asyncio даёт каждой задаче свой контекст. Снимок передают, например, в loop.call_soon(..., context=ctx) или asyncio.create_task(..., context=ctx).

Примеры

import contextvars
mode = contextvars.ContextVar('mode', default='-')
mode.set('a')
ctx = contextvars.copy_context()
mode.set('b')
print(ctx[mode], mode.get())  # → a b
def change():
    mode.set('inside')
    return mode.get()
print(ctx.run(change), mode.get(), ctx[mode])  # → inside b inside

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности