我正在构建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)
答案 0 :(得分:1)
散景状态仅在回调结束时与浏览器同步。如果要进行一些更新,然后进行大量阻塞性工作,然后进行另一项更新,则需要进行拆分,以便第一个回调立即完成,然后安排其余工作在返回之后进行。最简单的方法是使用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))
:
Sub x()
Dim r As Range, n As Long
With Worksheets("DataSource")
Set r = .Range("E" & .Rows.Count).End(xlUp) 'find the last cell in column E
n = .Range("A" & Rows.Count).End(xlUp).Row 'find row number of last cell in A
r.AutoFill Range(r, .Cells(n, "A")) 'autofill in E from last cell to last row as per A
End With
End Sub