Bokeh 服务器 API#
将 Bokeh 服务器嵌入到更大的 Tornado 应用程序或 Jupyter Notebook 中,并使用现有的 Tornado IOloop
可能很有用。以下是这种场景中 Bokeh 集成的基础
from bokeh.server.server import Server
server = Server(
bokeh_applications, # list of Bokeh applications
io_loop=loop, # Tornado IOLoop
**server_kwargs # port, num_procs, etc.
)
# start timers and services and immediately return
server.start()
您还可以直接创建和控制 IOLoop
。这在创建独立的“普通”Python 脚本(用于服务 Bokeh 应用程序)或将 Bokeh 应用程序嵌入到 Flask 或 Django 等框架中时可能很有用,而无需运行单独的 Bokeh 服务器进程。您可以在 examples 目录中找到一些此技术的示例
另请注意,bokeh serve
的每个命令行参数都有一个对应的 Server
关键字参数。例如,使用 --allow-websocket-origin
命令行参数等效于将 allow_websocket_origin
作为参数传递。
使用 bokeh.client
连接#
您可以通过客户端 API 直接与 Bokeh 服务器交互,您可以使用它来修改 Bokeh 服务器上现有会话中的 Bokeh 文档。
例如,这对于对由另一个 Web 框架(如 Flask 或 Django)嵌入的 Bokeh 应用程序进行用户特定的自定义很有用。在以下示例中,Flask 端点嵌入了一个已经在服务器上运行的“滑块”应用程序,但在将输出传递给用户之前更改了绘图标题。
from flask import Flask, render_template
from bokeh.client import pull_session
from bokeh.embed import server_session
app = Flask(__name__)
@app.route('/', methods=['GET'])
def bkapp_page():
with pull_session(url="https://127.0.0.1:5006/sliders") as session:
# update or customize that session
session.document.roots[0].children[1].title.text = "Special sliders for a specific user!"
# generate a script to load the customized session
script = server_session(session_id=session.id, url='https://127.0.0.1:5006/sliders')
# use the script in the rendered page
return render_template("embed.html", script=script, template="Flask")
if __name__ == '__main__':
app.run(port=8080)