ExpertiDict

Python · Avançado · Inglês · Técnico

contextvars

/ˈkɑntɛkst ˈvɛɹz/substantivo

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 mudou

Exemplos

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

Veja também

Todos os termos de Python