保持bokeh小部件在应用程序中运行

2024-05-19 11:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做什么

为我的工作组制作一个仪表板服务器,在那里可以选择他想要的仪表板。仪表板由绘图和小部件组成,它们通常不能由js处理,只能由python回调函数来处理。在

什么在起作用

  • 一个bokeh服务器和一个平面服务器
  • 仪表板在bokeh服务器上运行良好。在
  • 我有一个正在运行的烧瓶服务器,我可以显示用户选择的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}$

但它当然是在阻止应用程序。在

有人有经验吗?是否应该/是否可以在子流程中运行循环“直到”关闭?在


Tags: fromimport服务器loopid部件sessionbokeh
1条回答
网友
1楼 · 发布于 2024-05-19 11:31:17

loop_until_closed函数总是阻塞的。在

更新:loop_until_closed正在从bokeh2.0的公共API中删除

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

If you need to scale out a Bokeh application, running them directly on a Bokeh server is preferable.

直接在bokeh服务器上运行意味着要创建一个运行时使用的app.py

bokeh serve 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

相关问题 更多 >

    热门问题