要在Bokeh服务器上强制刷新客户端图形,可以使用bokeh.server.session
模块中的Session
类的force_roundtrip()
方法。该方法会立即发送一个回调,强制客户端刷新其图形。
以下是一个示例代码,演示如何在Bokeh服务器中使用force_roundtrip()
方法:
from bokeh.plotting import figure
from bokeh.layouts import column
from bokeh.models import Button
from bokeh.server.server import Server
from bokeh.server.session import Session
from bokeh.application import Application
from tornado.ioloop import IOLoop
def modify_doc(doc):
# 创建一个图形和一个按钮
p = figure(width=400, height=400)
p.circle([1, 2, 3], [4, 5, 6], size=20)
button = Button(label="强制刷新")
# 点击按钮时,调用回调函数
def refresh():
# 强制刷新客户端图形
session.force_roundtrip()
button.on_click(refresh)
# 将图形和按钮组合在一起
layout = column(p, button)
doc.add_root(layout)
# 创建一个Bokeh应用程序
app = Application(FunctionHandler(modify_doc))
# 创建一个Bokeh服务器,使用默认主机和端口
server = Server({'/': app}, io_loop=IOLoop(), allow_websocket_origin=["localhost:8000"])
# 获取默认会话
session = Session()
session.use_doc('default')
session.load_document(server._tornado_app._bokeh_applications['/'])
session.store_document(server._tornado_app._bokeh_applications['/'].context)
# 启动服务器
server.start()
# 进入IOLoop事件循环
server.io_loop.start()
在上面的示例中,我们创建了一个简单的Bokeh应用程序,其中包含一个图形和一个按钮。当点击按钮时,回调函数refresh()
会被调用,该函数使用force_roundtrip()
方法强制刷新客户端图形。
要运行这个示例,可以在命令行中输入bokeh serve
命令,然后将上面的代码保存到一个Python文件中(例如app.py
),并将它作为参数传递给bokeh serve
命令。然后,在浏览器中访问http://localhost:5006/
,您将看到图形和按钮。每当点击按钮时,图形都会立即刷新。
请注意,要在Bokeh服务器上使用force_roundtrip()
方法,您需要手动创建一个Bokeh服务器,并获取默认会话,如上面的示例所示。