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.