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Сообщить о неточности