为我的工作组制作一个仪表板服务器,在那里可以选择他想要的仪表板。仪表板由绘图和小部件组成,它们通常不能由js处理,只能由python回调函数来处理。在
我有一个正在运行的烧瓶服务器,我可以显示用户选择的dashboard。仪表板的根目录是这样的:
from bokeh.embed import autoload_server, Document
from flask import Flask, render_template
config = {}
app = Flask(__name__)
app.root("/focusmap")
def serve_focusmap():
dashboard = get_focusmap_dashboard() # a bokeh plot and widget layout
document = Document()
document.add_root(dashboard)
document.title = name
session = push_session(document, session_id=None)
body = autoload_server(None, session_id=session.id)
config['currentSession'] = session
return render_template("board.html", body=body)
这样可以很好地显示仪表板,但小部件不起作用,因为某个地方缺少session.loop_until_closed()
。
阅读bokeh服务器文档时发现,loop_until_closed
不是由bokeh服务器处理的,而是通过应用程序处理的。在
我不知道如何在不阻止应用程序的情况下生成session.loop_until_closed()
。在
我试过:
^{pr2}$但它当然是在阻止应用程序。在
有人有经验吗?是否应该/是否可以在子流程中运行循环“直到”关闭?在
loop_until_closed
函数总是阻塞的。在更新:
loop_until_closed
正在从bokeh2.0的公共API中删除您唯一的选择是在线程中运行该函数,但对每个连接都这样做可能会很麻烦。该部分还指出,如果您想扩展一个应用程序(即在本地部署更多应用程序),那么使用
bokeh.client
确实不是合适的工具:直接在bokeh服务器上运行意味着要创建一个运行时使用的
app.py
如本节所述:
http://docs.bokeh.org/en/latest/docs/user_guide/server.html#building-bokeh-applications
然后这个应用程序可以使用
autoload_server
或IFrames嵌入到Flask应用程序中。在否则,您现在还可以通过在您创建和控制的
IOLoop
上显式运行服务器来启动Bokeh服务器作为“库”。这意味着您可以在烧瓶应用程序中运行Bokeh服务器。示例(包括烧瓶)从这里链接:http://docs.bokeh.org/en/latest/docs/user_guide/server.html#embedding-bokeh-server-as-a-library
相关问题 更多 >
编程相关推荐