2017-02-23 48 views
1

运行什么我做想做的事

让我的工作组是一种仪表盘服务器的其中一个可以选择他想要它的仪表板。仪表板包含通常不能由js处理但通过python回调函数处理的图和小部件。保持背景虚化小部件应用

什么是工作

  • 散景服务器和一台服务器
  • 仪表板运行的背景虚化服务器上​​的罚款。
  • 我有一个运行的Flask服务器,我可以显示用户选择的dahshboard。仪表板根植一种这样:

    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吗?

回答

1

loop_until_closed函数始终阻塞。这多少是在文档在本节的第子弹说:

http://bokeh.pydata.org/en/latest/docs/user_guide/server.html#connecting-with-bokeh-client

你唯一的选择是运行在一个线程的功能,但这样做,对于每一个连接可以是笨重。该条还规定,如果要向外扩展的应用程序(即部署比本地多),即使用bokeh.client是真的不恰当的工具:

如果需要扩展出背景虚化的应用程序,运行他们直接在Bokeh服务器上是可取的。

直接在背景虚化的服务器上运行方式,比如让你与

bokeh serve app.py 

运行在本节中描述的app.py

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

那么这个程序可以被嵌入在Flask应用程序中使用autoload_server或IFrame。

否则,您现在还可以通过在您创建和控制的IOLoop上明确运行服务器,将“散景服务器”作为“库”启动。这意味着您可以在Flask应用程序的“内部”运行Bokeh服务器。示例(包括烧瓶一个)从这里链接:

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

+0

好的。谜题中缺少一些东西,并且不容易找到,是如何访问http请求以使散景应用程序的情况依赖于显示用户板的顺序:例如app?board = focusmap。现在我有了这个(http://bokeh.pydata.org/en/latest/docs/user_guide/server.html#accessing-the-http-request)我可以将该应用程序嵌入到iframe中,并使用正确的src – user3240484

+0

FWIW这在http://bokeh.pydata.org/en/latest/docs/user_guide/server.html#accessing-the-http-request中有描述如果有其他地方,或者可以改进它的地方,请告诉我们在GitHub上。另外在'0.12.4'中的FYI有一个查询参数和'--num-threads'大于1的错误。这个问题在master和最新的开发版本中是固定的(并且将在0.12.5中为几周) – bigreddot

+0

另请注意,从'0.12.5'开始,'request.arguments'(即查询参数)是可用请求的* only *部分。 – bigreddot