如何提取Plotly Dash的dcc.Store中存储的数据并赋值给外部new_df
核心原理说明
dcc.Store 是Dash前端的存储组件,其存储的JSON数据仅在Dash服务运行、回调触发更新时才会被写入,你直接手动调用回调函数store_csv无法获取运行时的最新数据,要实现需求可以按以下两种场景选择方案:
方案1:单进程/同服务端进程内读取(最简方案)
直接在回调更新dcc.Store的同时,给外部变量赋值即可,单worker运行时完全可用:
import pandas as pd from dash import Dash, dcc, Input, Output app = Dash(__name__) # 提前定义外部变量 new_df = pd.DataFrame() @app.callback( Output('store-csv', 'data'), Input('csv-input', 'value')) def store_csv(csv_input): # 声明使用全局外部变量 global new_df df = pd.DataFrame(some_df) # 同步更新外部变量 new_df = df.copy() return df.to_json(orient='split')
注意:如果是多worker/多进程部署Dash服务,全局变量会在多个进程中独立存储,不同请求可能拿到不一致的值,该场景下建议改用Redis等共享缓存存储df序列化结果,读写都走共享缓存即可。
方案2:独立进程跨环境读取
如果new_df在完全独立于Dash服务的Python进程中运行,你可以给Dash底层的Flask服务新增一个API接口,对外暴露dcc.Store的最新数据:
- Dash服务端新增路由代码:
from flask import jsonify # 存储最新的store数据 latest_json = None @app.callback( Output('store-csv', 'data'), Input('csv-input', 'value')) def store_csv(csv_input): global latest_json df = pd.DataFrame(some_df) latest_json = df.to_json(orient='split') return latest_json # 新增API接口对外暴露数据 @app.server.route('/get-df-json') def get_df_json(): return jsonify(latest_json)
- 外部进程请求接口获取数据转DataFrame:
import requests import pandas as pd # 替换为你的Dash服务访问地址 resp = requests.get("http://127.0.0.1:8050/get-df-json") new_df = pd.read_json(resp.json(), orient="split")
内容的提问来源于stack exchange,提问作者bison72
相关产品推荐
相关产品推荐

