Amy 原创整理|资料核验:2026-10-31
【Python文档事实】ContextVar.set(value)会返回Token;把这个token交给reset,可恢复set之前的值。这里的“之前”不一定是定义时的默认值,因为外层代码可能已经设置过它。一个token只能用于reset一次。
【教学示例】假设模块层定义 request_id = ContextVar("request_id", default="unset"),处理一小段工作时可写:
token = request_id.set("demo-42")
try:
print(request_id.get())
finally:
request_id.reset(token)
这里的编号是示例,不是真实请求信息。try/finally的目的,是让这段工作抛出异常时也能执行恢复。
【Amy建议】把ContextVar对象放在模块顶层,避免在闭包里临时创建。若看到 with request_id.set(...) 的写法,要注意Token作为上下文管理器是Python 3.14开始支持的功能;维护旧版本项目时先查运行版本,别直接复制新语法。