我有以下问题: 在我的Plotly Dash应用程序中,有一个由按钮触发的功能,它可能需要30秒钟才能完成执行。
我现在的问题是,在第一次执行该功能的同时,可以通过单击按钮再次触发该功能。
例如:
import dash
from dash.dependencies import Input, Output
import dash_html_components as html
import time
app = dash.Dash()
app.layout = html.Div([
html.H2('Imports'),
html.Button('Button', id='button'),
html.H3(id='button-clicks'),
])
@app.callback(
Output('button-clicks', 'children'),
[Input('button', 'n_clicks')]
)
def import_data(n_clicks):
if n_clicks:
for t in range(0, 10):
print(t)
time.sleep(1)
return 'Button has been clicked {} times'.format(n_clicks)
if __name__ == '__main__':
app.run_server(debug=True)
当我单击我的按钮时,输出将是所需的: 0 1个 2 3 4
但是当我在2秒内两次单击按钮时,输出为:0 1个 2 0 3 1个 4 2 3 4,因为它并行执行了两次import_data函数。
有什么方法可以防止这种并行执行(例如,锁定按钮)?
THX和BR
答案 0 :(得分:2)
我不确定您使用的是哪个Flask版本,但是在您的情况下,似乎threaded
参数是默认启用的。启用threaded
参数后,Flask将同时处理请求。
尝试禁用它,
app.run_server(debug=True, threaded=false)