gpt4 book ai didi

plotly-dash - Plotly Dash - dcc.Store 回调触发两次

转载 作者:行者123 更新时间:2023-12-03 20:56:45 33 4
gpt4 key购买 nike

我遇到了 Plotly Dash 的问题,即由 dcc.Store 组件触发的回调每次触发两次。请参阅下面的代码和示例输出代码,它基于 Dash 文档 ( https://dash.plot.ly/dash-core-components/store ) 中的示例。

任何人都可以解释这一点或建议一种解决方法来防止它?

最小的工作示例代码:

import dash

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

app = dash.Dash(__name__)

app.layout = html.Div([
dcc.Store(id='local', storage_type='local'),
html.Div(html.Button('localStorage', id='local-button')),
html.Div(0, id='local-clicks'),
])


@app.callback(Output('local', 'data'),
[Input('local-button', 'n_clicks')],
[State('local', 'data')])
def on_click(n_clicks, data):
if n_clicks is None:
raise PreventUpdate

app.logger.info(f"Updating data store")

data = data or {'clicks': 0}

data['clicks'] = data['clicks'] + 1
return data


@app.callback(Output('local-clicks', 'children'),
[Input('local', 'modified_timestamp')],
[State('local', 'data')]
)
def on_data(ts, data):
if ts is None:
raise PreventUpdate

app.logger.info(f"New data found! ({ts}, {data})")

return f"{ts}, {data['clicks']}"


if __name__ == '__main__':
app.run_server(debug=True, port=8077, threaded=True)

示例输出:
Running on http://127.0.0.1:8077/
Debugger PIN: 597-637-135
New data found! (1584011957193, {'clicks': 24})
New data found! (1584011957193, {'clicks': 24})
Updating data store
New data found! (1584012443177, {'clicks': 25})
New data found! (1584012443177, {'clicks': 25})
Updating data store
New data found! (1584012445159, {'clicks': 26})
New data found! (1584012445159, {'clicks': 26})

最佳答案

我建议将内存存储转换为 session并将第二个回调中的代码更改为以下内容:

def on_data(ts, data):

if not data or not ts:
raise PreventUpdate

...

这应该解决一些最初的几个循环回调。

关于plotly-dash - Plotly Dash - dcc.Store 回调触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60653311/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com