capypad
0 Tage Serie
python / expert
Snippet

Geltungsbereich-Zustand mit Context Variables

Kontextvariablen (contextvars) ermöglichen es Daten, innerhalb eines spezifischen Ausführungsflusses zu bestehen. Im Gegensatz zu Thread-Local Storage erkennen sie asynchrone Aufgaben, was sie ideal für die Speicherung von Request-IDs oder Transaktionsstatus in Webservern macht.

snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
import contextvars
import asyncio
 
client_id = contextvars.ContextVar("client_id")
 
async def log_operation(msg):
print(f"[Client {client_id.get()}] {msg}")
 
async def handle_request(cid):
client_id.set(cid)
await log_operation("Starting process")
 
asyncio.run(asyncio.gather(handle_request(1), handle_request(2)))
Erklärung
1
client_id = contextvars.ContextVar("client_id")
Deklariert eine Variable, die isolierten Speicher pro asynchronem Kontext bietet.
2
client_id.set(cid)
Setzt den Wert für die aktuelle Aufgabe, ohne andere gleichzeitig laufende Aufgaben zu beeinflussen.