Python · Avançado · Inglês · Técnico
contextvars
Módulo com ContextVar, variáveis cujo valor é isolado por contexto de execução: cada tarefa asyncio enxerga o seu valor, sem precisar passar parâmetros adiante.
Onde usar
Usado para guardar id de requisição, usuário atual e dados de tracing em servidores assíncronos, onde threading.local não basta. Em code review, aparece em middlewares e em logs.
Em código
import contextvars as cv
v = cv.ContextVar('v', default=0)
def muda():
v.set(99)
cv.copy_context().run(muda)
print(v.get()) # 0, o de fora não mudouExemplos
We keep the request id in a ContextVar for the logs.
Guardamos o id da requisição num ContextVar para os logs.
Each task sees its own value through contextvars.
Cada tarefa vê o seu próprio valor por meio do contextvars.
Cuidado
Não use threading.local em código asyncio: várias corrotinas compartilham a mesma thread e veriam o mesmo valor.
Sinônimos
variável de contexto