首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Bokeh服务器集成到金字塔应用程序中?

如何将Bokeh服务器集成到金字塔应用程序中?
EN

Stack Overflow用户
提问于 2017-06-06 22:16:45
回答 2查看 656关注 0票数 1

按照复杂性的顺序,对于金字塔,我可以创建静态bokeh图,然后用div标记(如概述的这里 )将它们不相关联。

Bokeh文档清楚地解释了如何设置一个bokeh服务器进行交互式数据探索,我已经成功地创建了这样一个应用程序。

不过,我想做的是在金字塔视图页面中有一个交互式的图形。本页的要求如下:

  • 加载视图后,将以某种方式启动bokeh服务器,并将数据加载到服务器的对象模型中。
  • 无论如何,金字塔视图还将接收服务器对象模型中的数据并呈现数据。

有些事情我不清楚:

  • 我不确定用于选择和过滤数据的“小部件”应该呈现在哪里。看来,为了便于与图形的其余部分进行交互,它们应该是bokeh服务器的一部分。
  • 我不知道如何将bokeh服务器页面集成到金字塔视图中。
  • 我也不确定如何从金字塔web应用程序中启动bokeh服务器。

一段提到了如何将bokeh服务器嵌入到一个烧瓶或龙卷风应用程序中。但这一段太短了,我现在无法理解。所以我在问我如何在金字塔中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 18:50:57

正如双点所说,工作流与代码中的微小变化非常相似。我实际上是根据他的回答来回答的。谢谢双点!

以下是我的解决方案,把波克-塞弗和金字塔.

  1. 创建一个函数来生成Bokeh文档(图)
代码语言:javascript
复制
def bokeh_doc(doc):
    # create data source
    # define all elements that are necessary
    # ex: 
    p = line(x, y, source)

    # now add 'p' to the doc object
    doc.add_root(p)

    # define a callback if necessary
    # and register that callback
    doc.add_periodic_callback(_cb, delay)
  1. 向金字塔服务器配置对象添加应用程序的路由位置。主要是在__init__.py或配置路由的任何其他文件中。
代码语言:javascript
复制
    conf.add_route('bokeh_app', '/bokeh-app')
  1. 添加必须呈现bokeh_app的视图。这个函数可以用views.py编写,也可以在您认为合适的地方编写。
代码语言:javascript
复制
from pyramid.view import view_config
from bokeh.embed import server_document

@view_config(route_name='bokeh_app', renderer='static/plot.jinja2')
def bokeh_view(request):
    # this '/app' route to the plot is configured in step. 4
    # using default host and port of bokeh server. 
    # But, the host and port can be configured (step. 4)
    script = server_document('localhost:5006/app') 

    # assuming your jinja2 file has 
    # {{ script|safe }}
    # embedded somewhere in the <body> tag
    return {'script': script}
  1. 现在,启动一个bokeh服务器。
代码语言:javascript
复制
from bokeh.application import Application 
from bokeh.application.handlers import FunctionHandler 
from bokeh.server.server import Server

# bokeh_doc is the function which defines the plot layout (step. 1)
chart_app = Application(FunctionHandler(bokeh_doc))

# the '/app' path is configured to display the 'chart_app' application
# here, a different host and port for Bokeh-server could be defined
# ex: {"<host2:9898>/app_bokeh": chart_app}
bokeh_server = Server({"/app": chart_app}, allow_websocket_origin=["localhost:6543"]) 

# start the bokeh server and put it in a loop
server.start()
server.io_loop.start()

allow_websocket_origin接受必须升级以支持bokeh所需的web套接字连接的字符串列表。在这种情况下,我们需要给出金字塔服务器的url。

  1. 最后,启动金字塔服务器。
代码语言:javascript
复制
from wsgiref.simple_server import make_server

pyramid_app = conf.make_wsgi_app()
pyramid_server = make_server('localhost', 6543, pyramid_app)

pyramid_server.serve_forever()
票数 4
EN

Stack Overflow用户

发布于 2017-06-15 14:30:23

嵌入在另一个(瓶、django、龙卷风等)中的运行公式。在所有情况下,流程基本上是相同的。他在这个“独立”示例中给出了基本要素,该示例仅显示了在“旋风”IOloop上启动Bokeh服务器所需的步骤,您可以自己管理:

embed.py

基本步骤是:

  • 创建一个函数来生成Bokeh文档: def modify_doc(doc):#在布局中设置绘图和小部件,然后是doc.add_root(some_layout)
  • 使用此函数创建一个Bokeh Application,并使用它启动一个Bokeh服务器: 从bokeh.application.handlers导入FunctionHandler从bokeh.application导入应用程序从bokeh.server.server导入服务器=应用程序(FunctionHandler(Modify_doc))服务器=服务器({‘/’:bokeh_app},io_loop=io_loop) server.start()
  • 最后,将Bokeh Server添加到您创建和管理的龙卷风IOloop中: 从tornado.ioloop import IOLoop io_loop = IOLoop.current() io_loop.add_callback(server.show,"/") io_loop.start()

然后,您的(酒瓶、Django、金字塔等)视图可以使用标准方式使用<iframes>bokeh.embed.autoload_server从该服务器嵌入Bokeh应用程序(例如,请参阅Flask脚本中的示例)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44400581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档