You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI并发用户状态未隔离:不同会话属性为何同步?

问题原因与解决方案

核心原因是你的AppState类大概率错误地使用了类属性而非实例属性来存储用户状态。类属性是所有类实例共享的,不管创建多少个AppState对象,修改类属性都会同步影响所有实例。

错误的AppState定义示例

如果你的AppState是这样写的,就会出现你遇到的问题:

class AppState:
    # 这是类属性,所有实例共享同一份数据
    user_info = {}
    preferences = {}

为什么会出现交叉影响?

当两个不同user-id的请求创建各自的AppState()实例时,虽然session_store里存的是两个不同的对象,但它们内部的user_info、preferences等变量是绑定在AppState类上的,而非每个实例独立拥有。所以你修改其中一个实例的变量时,本质是修改了类的属性,另一个实例访问的也是同一个类属性,自然会看到变量同步出现。

修复方案

把需要每个用户独立存储的变量放到__init__方法中,用self.xxx定义为实例属性,确保每个AppState实例拥有独立的数据:

class AppState:
    def __init__(self):
        # 这是实例属性,每个实例各自独立
        self.user_info = {}
        self.preferences = {}

这样修改后,不同user-id对应的AppState实例就会拥有完全独立的状态,修改其中一个不会影响另一个。

内容的提问来源于stack exchange,提问作者luanpo1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:12:35