You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh Server启动时加载屏无法正常显示的问题排查

解决Bokeh Server初始加载时加载屏不生效的问题

问题根源在于初始启动时,curdoc().add_next_tick_callback()是在服务器端文档初始化阶段就被执行,此时客户端还未建立WebSocket连接,计算直接在服务器端完成后一次性推送给客户端,导致加载屏根本没机会在客户端显示。

解决方案:利用on_session_created事件触发初始计算

Bokeh Server提供了on_session_created事件,该事件会在客户端成功建立WebSocket连接并创建会话后触发,刚好满足我们需要在客户端加载完初始UI(包括加载屏)后再执行计算的需求。

修改后的代码如下:

from bokeh.plotting import curdoc
from main_frame import MainFrame

print('start')

# 构造函数包含创建加载屏的代码
main_frame = MainFrame()

curdoc().add_root(main_frame.layout)

def handle_session_init(session_context):
    # 客户端会话建立后,安排计算回调
    session_context.session.document.add_next_tick_callback(lambda: main_frame.plot('initial_file_name'))

curdoc().on_session_created(handle_session_init)

print('after adding session callback')

原理说明

  • on_session_created回调会在每个客户端连接到应用时触发,确保计算逻辑是在客户端已经渲染出初始加载屏之后才执行。
  • 计算过程中,加载屏会保持显示状态,直到main_frame.plot()方法完成计算并更新UI组件(替换加载屏为图表内容)。

额外检查点

确保你的MainFrame类中,plot()方法的逻辑是:

  1. 开始计算前保持加载屏可见
  2. 计算完成后隐藏加载屏,显示生成的图表

内容的提问来源于stack exchange,提问作者Aziuth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:53:30