【问题标题】:Keep bokeh widgets running in app让散景小部件在应用程序中运行
【发布时间】:2017-02-23 15:00:59
【问题描述】:

我想做的事

为我的工作组制作一种仪表板服务器,人们可以在其中选择他想要的仪表板。仪表板由通常无法由 js 处理但由 python 回调函数处理的绘图和小部件组成。

什么工作

  • 散景服务器和平面服务器
  • 仪表板在散景服务器上运行良好。
  • 我有一个正在运行的 Flask 服务器,我能够显示用户选择的仪表板。仪表板以这种方式植根:

    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()

阅读散景服务器文档,我发现loop_until_closed 不是由散景服务器处理,而是来自应用程序。

什么不工作

我无法弄清楚如何在不阻止应用的情况下制作session.loop_until_closed()

我试过了:

@app.after_request
def loopSession(response):
    global config
    session  = config.get('currentSession',None)
    if session:
        session.loop_until_closed()
return response

但它当然会阻止应用程序。

有人有这方面的经验吗?我应该/我可以在子进程中运行 loop_until_closed 吗?

【问题讨论】:

    标签: python widget bokeh


    【解决方案1】:

    loop_until_closed 函数始终处于阻塞状态。

    更新:loop_until_closed 正在从 Bokeh 2.0 的公共 API 中删除

    您唯一的选择是在线程中运行该函数,但对每个连接都这样做可能很笨拙。该部分还指出,如果您想扩展应用程序(即在本地部署更多),使用bokeh.client 确实不是合适的工具:

    如果您需要扩展 Bokeh 应用程序,最好直接在 Bokeh 服务器上运行它们。

    直接在散景服务器上运行意味着例如制作一个 app.py 以供您运行

    bokeh serve app.py
    

    如本节所述:

    http://docs.bokeh.org/en/latest/docs/user_guide/server.html#building-bokeh-applications

    然后可以使用autoload_server 或 IFrame 将此应用嵌入到 Flask 应用中。

    否则,您现在还可以通过在您创建和控制的 IOLoop 上显式运行服务器来将 Bokeh 服务器作为“库”启动。这意味着您可以在 Flask 应用程序“内部”运行 Bokeh 服务器。示例(包括 Flask 示例)从此处链接:

    http://docs.bokeh.org/en/latest/docs/user_guide/server.html#embedding-bokeh-server-as-a-library

    【讨论】:

    • 好的。谜题中缺少并且不容易找到的东西是如何访问 http 请求以使散景应用案例依赖于显示用户板的顺序:例如 app?board=focusmap。现在我有了这个(bokeh.pydata.org/en/latest/docs/user_guide/…),我可以将应用程序嵌入到具有正确 src 的 iframe 中
    • 此处描述的 FWIW bokeh.pydata.org/en/latest/docs/user_guide/… 如果有其他地方或可以改进它的地方,请在 GitHub 上告诉我们。仅供参考,0.12.4 中存在查询参数错误,--num-threads 大于 1。该问题已在 master 和最新的开发版本中修复(几周后将在 0.12.5 中修复)
    • 另外请注意,从0.12.5 开始,request.arguments(即查询参数)是唯一可用的请求部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多