破折号:执行触发功能时的“锁定”按钮

时间:2019-02-19 00:46:28

标签: python plotly-dash

我有以下问题: 在我的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

1 个答案:

答案 0 :(得分:2)

我不确定您使用的是哪个Flask版本,但是在您的情况下,似乎threaded参数是默认启用的。启用threaded参数后,Flask将同时处理请求。

尝试禁用它,

app.run_server(debug=True, threaded=false)