← retour aux snippets

contextvars: contexte isolé par requête/tâche

Stocker des variables spécifiques à une requête sans globals.

python concurrency #contextvars#context#scoped

objectif

Stocker des variables spécifiques à une requête sans globals.

code minimal

import contextvars

user_var = contextvars.ContextVar("user")

def handler():
    u = user_var.get("anon")
    return f"hi {u}"

token = user_var.set("ada")
try:
    print(handler() == "hi ada")  # attendu: True
finally:
    user_var.reset(token)

utilisation

import contextvars
cv = contextvars.ContextVar("req_id", default="none")
print(cv.get() == "none")

variante(s) utile(s)

import contextvars
cv = contextvars.ContextVar("x", default=0)
token = cv.set(1); cv.reset(token)
print(cv.get() == 0)

notes

  • Les ContextVar se propagent entre tâches asyncio correctement.
  • Évitez les globals partagés pour des apps concurrentes.