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

如何同步Python Plotly/Dash中dcc.Checklist的多用户实例状态

解决方案

Dash默认每个用户访问会话的组件状态相互独立,要实现多用户间的Checklist状态同步,核心是在服务端维护一份全局共享的状态,再通过回调实现状态的双向同步,以下是可直接运行的完整实现:

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

app = dash.Dash(__name__)

# 服务端全局共享状态,存储Checklist的选中值
shared_checklist_value = ['NYC', 'MTL']

app.layout = html.Div([
    # 定时触发器,用于同步全局状态到当前页面
    dcc.Interval(
        id='interval-component',
        interval=1*1000,  # 每1秒同步一次,单位是毫秒
        n_intervals=0
    ),
    html.Div([
        dcc.Checklist(
            id='shared-checklist',
            options=[
                {'label': 'New York City', 'value': 'NYC'},
                {'label': 'Montréal', 'value': 'MTL'},
                {'label': 'San Francisco', 'value': 'SF'}
            ],
            value=shared_checklist_value
        )
    ])
])

# 回调1:任意用户修改Checklist时,更新服务端全局状态
@app.callback(
    Output('interval-component', 'n_intervals'),
    Input('shared-checklist', 'value'),
    prevent_initial_call=True
)
def update_global_state(current_value):
    global shared_checklist_value
    shared_checklist_value = current_value
    # 返回空更新不影响Interval的正常计数
    return dash.no_update

# 回调2:定时拉取服务端全局状态,同步到当前用户的页面
@app.callback(
    Output('shared-checklist', 'value'),
    Input('interval-component', 'n_intervals')
)
def sync_local_state(n):
    global shared_checklist_value
    return shared_checklist_value

if __name__ == '__main__':
    app.run_server(port=8050)

关键说明

  • 全局变量shared_checklist_value存储在服务端内存,所有访问用户共享,是状态同步的核心
  • 第一个回调监听Checklist的修改事件,任意用户修改选中状态后都会更新全局变量
  • 第二个回调通过dcc.Interval定时拉取全局状态,自动更新当前页面的Checklist值,实现跨标签页、跨用户的状态同步

注意事项

  • 上述实现用内存存储全局状态,服务重启后数据会重置,如果需要持久化可以把状态存在Redis、本地文件或者数据库中
  • 如果是多进程部署Dash应用,进程间内存不共享,必须用第三方公共存储(比如Redis)来保存全局状态才能正常同步
  • 可以调整dcc.Interval的interval参数控制同步频率,数值越小同步延迟越低,但服务端压力也会越大,可根据实际场景调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:00