загрузить dash python, затем обновить позже - PullRequest
0 голосов
/ 12 декабря 2018

Я немного новичок в dash и python, так что прости меня и дай мне знать, есть ли что-то, что можно упростить или нужно изменить.

Проблема

Я хочу показатьномер в тексте и обновлять этот номер каждые 10 минут.Я успешно сделал это, но проблема в том, что я хочу, чтобы он загружался немедленно, а затем обновлялся каждые десять минут ... но тогда требуется 10 минут, чтобы загрузить этот текст при первом запуске приложения.

IУ меня такое чувство, что мне нужно добавить логику while / if для обратного вызова, но я не уверен.Вот ссылка на результат

См. Ниже код

Если вы хотите, чтобы он был воспроизводимым, вы можете установить любое значение для переменной данных в get_data ()

#Imports for dash
import dash
from dash.dependencies import Output, Event
import dash_core_components as dcc
import dash_html_components as html

#imports for database connection and data processing
from sshtunnel import SSHTunnelForwarder
import pymysql as db
import pandas as pd


# ssh variables go here
host = 
localhost = 
ssh_username = 
private_key = 
# database variables go here
user=
password=
database=

#This is the function for processing a query
def query(q):

    #function for getting data from database

def get_data():
    df_test = query('call example') #calls a procedure which returns a number
    data = df_test['test'].loc[0] # selects the result from the dataframe
    data_insert = 'This month we have {} new clients!!!'.format(data) #inserts the result into the string
    return data_insert

app = dash.Dash(__name__)

app.layout = html.Div(
    [
        html.Div(id='my-div', children='''
        '''.format(get_data())),
        dcc.Interval(
            id='update',
            interval=10* 60000 # I would like for this to be 10 minutes
        )
    ]
)
@app.callback(Output('my-div', 'children'),
              events=[Event('update', 'interval')])
def update_data(): # function for returning the new data
    return get_data()

if __name__ == '__main__':
    app.run_server(debug=True)

1 Ответ

0 голосов
/ 13 декабря 2018

Сообщество Dash ответило мне хорошим решением.Смотрите ниже:

from datetime import datetime

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output


def serve_layout():
    return html.Div(
        [dcc.Interval(id="interval", interval=10000), html.P(id="output")]
    )


app = dash.Dash()

app.layout = serve_layout


@app.callback(Output("output", "children"), [Input("interval", "n_intervals")])
def display_time(n):
    return datetime.now().strftime("The time is: %H:%M:%S")


if __name__ == "__main__":
    app.run_server()
...