请求上下文传播
Request Context Propagation
跨线程的请求上下文自动传播,支持分布式追踪和日志关联
子问题
1.ContextVar 线程安全存储
2.子线程上下文自动继承
3.日志 trace_id 自动注入
4.ThreadPoolExecutor 上下文传播
5.异步任务队列消费时的上下文重建
6.Flask g 对象到 FastAPI ContextVar 的迁移兼容
各项目的解法1 solutions
Signals
横向对比
| 维度 | MemOS |
|---|---|
| 存储机制 | ContextVar[dict] 序列化存储,避免跨线程共享可变对象 |
| 传播方式 | ContextThreadPoolExecutor 重写 submit/map,functools.wraps 透明包装 |
| 上下文字段 | trace_id + api_path + env + user_type + user_name + source + 可扩展 _data |
| 日志集成 | ContextFilter 自动注入 + CustomLoggerRequestHandler 远程推送 |
| 中间件入口 | Starlette BaseHTTPMiddleware,三级 header 优先级提取 trace_id |
| 异步任务恢复 | SchedulerDispatcher 从消息体提取 trace_id 重建 RequestContext |
最佳实践
1.ContextVar 替代 threading.local
2.自定义 ThreadPoolExecutor 包装 submit
3.ContextFilter 统一日志格式
4.ContextVar 存储序列化 dict 而非对象引用避免竞态
5.消息队列消费端从消息体恢复 trace_id 重建 RequestContext