问题域/PD-404

请求上下文传播

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