diff --git a/dash-asynchronous.py b/dash-asynchronous.py index 8cf4da0..e7cf3db 100644 --- a/dash-asynchronous.py +++ b/dash-asynchronous.py @@ -1,12 +1,12 @@ import dash -from dash.dependencies import Input, Output, Event +from dash.dependencies import Input, Output import dash_core_components as dcc import dash_html_components as html +import logging import datetime import time - class Semaphore: def __init__(self, filename='semaphore.txt'): self.filename = filename @@ -24,10 +24,8 @@ def unlock(self): def is_locked(self): return open(self.filename, 'r').read() == 'working' - semaphore = Semaphore() - def long_process(): if semaphore.is_locked(): raise Exception('Resource is locked') @@ -36,36 +34,36 @@ def long_process(): semaphore.unlock() return datetime.datetime.now() - app = dash.Dash() -server = app.server - +app.logger.setLevel(logging.DEBUG) def layout(): return html.Div([ html.Button('Run Process', id='button'), dcc.Interval(id='interval', interval=500), - html.Div(id='lock'), - html.Div(id='output'), + dcc.RadioItems( + id='lock', + options=[{'label': i, 'value': i} for i in ['Running...', 'Free']]), + html.Div(id='output') ]) - app.layout = layout - @app.callback( - Output('lock', 'children'), - events=[Event('interval', 'interval')]) -def display_status(): + Output('lock', 'value'), + [Input('interval', 'n_intervals')]) +def display_status(interval): + app.logger.debug("display_status") return 'Running...' if semaphore.is_locked() else 'Free' - @app.callback( Output('output', 'children'), - events=[Event('button', 'click')]) -def run_process(): + [Input('button', 'n_clicks')]) +def run_process(button_input): + app.logger.debug("run_process") return 'Finished at {}'.format(long_process()) +app.scripts.config.serve_locally = True if __name__ == '__main__': - app.run_server(debug=True, processes=5) + app.run_server(debug=True) \ No newline at end of file