Python Bokeh标记文本值无法更新

问题描述 投票:0回答:1

我正在构建Bokeh服务器来承载SQL查询功能,我想在网页上打印查询状态,所以我使用了Markup小部件并更新了它的文本值。但是,“正在运行查询,请稍候...”的信息永远不会显示,完成函数执行后只能显示最后一个值。

我如何找到问题所在?

下面是我的代码的一部分:

def submit_query():
    para_status.text = "Running query, please wait..."
    cnx = mysql.connector.connect(**SQL_config)
    query = clause_build()  #call the query clause from another def
    df = pd.read_sql(query, cnx)
    cnx.close()
    if df.size >0:
        para_status.text = ("Data query is done, total " + \
        str(int(df.shape[0])) + " rows.")
        df.to_csv(dpath + './query_result.csv', index = False)
    else:
        para_status.text = "Oops, result is empty, please refine the filters and try again."

para_status = PreText(text = '')

btn_submit = Button(label = "Submit query", button_type="success")
btn_submit.on_click(submit_query)

page = column(btn_submit, para_status)
python bokeh
1个回答
0
投票
结束时与浏览器同步。如果要进行一些更新,然后进行大量阻塞性工作,然后进行另一项更新,则需要进行拆分,以便第一个回调立即完成,然后安排其余工作在返回之后进行。最简单的方法是使用add_next_tick_callback

from time import sleep from bokeh.io import curdoc from bokeh.layouts import column from bokeh.models import Button, Div d = Div(text="start") b = Button() def work(): sleep(2) d.text = "end" def cb(): d.text = "middle" curdoc().add_next_tick_callback(work) b.on_click(cb) curdoc().add_root(column(d, b))

© www.soinside.com 2019 - 2024. All rights reserved.