Тире: кнопка «Блокировка» во время выполнения сработавшей функции - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть следующая проблема: В моем приложении 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 голосов
/ 23 февраля 2019

Я не уверен, какую версию Flask вы используете, но похоже, что в вашем случае параметр threaded включен по умолчанию.Когда параметр threaded включен, Flask обрабатывает запросы одновременно.

Попробуйте отключить его,

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

...