Hi!
I am unable to find a good solution on how to implement updating multiple graphs from threads in my dash app in python.
Goal of the applicaiton
- Have a drop down to select stocks ( Ex: aapl, tsla…)
- After a button click , create different independent graphs for each stock ( different graphs with ids: graph-aapl, graph-tsla,…)
- Create threads for each stock selected and the threads will perform some technical analysis and at the end update its graph ( graph-aapl, graph-tsla ) with data
Progress so far.
I am able to create the drop downs and have a call back to create dynamic graphs.
app.layout = html.Div(
children=[
html.Div(className=‘row’, # Define the row element
children=[
# Define the left element
html.Div(className=‘three columns div-user-controls’,
children=[
html.Div(
className=‘div-for-dropdown’,
children=[
dcc.Dropdown(id=‘stockselector’, options=coins,
multi=True, value=[‘aapl’],
style={
‘backgroundColor’: ‘#1E1E1E’},
className=‘stockselector’
),
],
style={‘color’: ‘#1E1E1E’}),
html.Div(
html.Button(‘Scan Coins’, id=‘button’)
),
]),
# Define the right element
html.Div(id="graphs", className='nine columns div-for-charts bg-grey',
children=[]),
])
])
Callback for timeseries price
@app.callback(Output(‘graphs’, ‘children’),
[Input(‘scan-submit’, ‘n_clicks’)],
[State(‘graphs’, ‘children’),
State(‘stockselector’, ‘value’)])
def update_graphs(n_clicks, old_output, input1, input2, input3):
if(n_clicks == 0):
return
# Construct the graph Modules on the page
graph_modules = []
for coin in input1:
graph_modules.append(html.Div(dcc.Graph(id='graph-' + coin, config={
'displayModeBar': False}, animate=True)))
# Start the Analysis Thread
th = threading.Thread(target=start_analysis, args=(input1, input3))
th.start()
return graph_modules
i can see that i have mulitple graphs now on my APP.
How can i update these graphs from different threads? i have seen the calback approach but the data frame is in the thread and how can i pass a figure from thread to the call back ?
Also since my graphs are dynamic , how can i have callbacks for dynamic content before creating them?
Any help is appreciated.
Thank you ,
Harsha