ColumnDataSource上的Bokeh流未更新p

2024-09-27 07:19:06 发布

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

我正在尝试制作一个Bokeh图,每当它收到数据时都会更新。我使用add_next_tick_callback(listener)来获取使用curl "http://localhost:5006/mviz/?vpom=0.9&rpom=0.9"查询的数据。使用curl发送数据时正确读取,但是

  1. 浏览器中的绘图在调用source.stream时不会更新。在
  2. 在多次发送数据时,我希望它每次增加行数时都将新数据追加到source.data。但是,即使多次单击上面的curl命令,它每次也只打印相同数量的行(只有四行,初始化时在三行后面追加一个新行)。在

下面是我在文件mviz.py中的脚本,我使用Bokeh版本1.0.4调用bokeh serve mviz.py来运行该脚本:

from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc
from bokeh.server.server import Server

source = ColumnDataSource({"vpom": [0.1, 0.2, 0.3], "rpom": [0.2, 0.3, 0.4]})
fig = figure(title='Streaming Circle Plot!', sizing_mode='scale_width',
        x_range=[0, 1], y_range=[0, 1])
fig.circle(source=source, x='vpom', y='rpom', size=10)
curdoc().add_root(column(fig))
curdoc().title = "Now with live updating!"

def listener():
  req = curdoc().session_context
  if req is not None:
      args = req.request.arguments
      print "recv", args
      if args:
          source.stream({k:map(float,v) for k,v in args.items()}, 100)
          print source.data

curdoc().add_next_tick_callback(listener)

如果这是使用Boekh在这个用例中的正确方法,请有人指出上面脚本的问题并加以评论。在


Tags: 数据fromimport脚本addsourcebokehfig
1条回答
网友
1楼 · 发布于 2024-09-27 07:19:06

这种方法存在一些问题/误解:

  • 每次向Bokeh服务器发出请求时,都会为该会话创建一个Session,以及一个{}。Document是Bokeh服务器在Python和JS之间自动保持同步的所有对象(绘图、小部件等)的集合。这份文件是从哪里来的?执行应用程序代码以生成它。重申另一种方式:每次建立连接时,应用程序代码都会重新运行。在

    一个直接的后果是,正如所写的,在使用上面的代码的HTTP请求之间,没有任何东西会“持续”或“积累”。每一个新的连接都是一张白纸。整个应用程序代码将在每次新连接时运行,但作为第一步,它可以首先从外部数据存储中查找并加载任何以前的数据。

  • 顶层的add_next_tick_callback甚至在会话加载到浏览器之前就要执行。没有理由将add_next_tick_callback放在顶层(即在其他按钮或小部件的回调代码之外),因为最终效果与将代码放在顶层的回调函数中是一样的。它在任何东西都没有进入用户浏览器之前就已经运行完毕。

那么,你可以做些什么来实现这样的事情呢?在

  • 如果您真的只想用查询参数来访问Bokeh应用程序URL,那么您的应用程序代码需要显式地负责保存和加载请求之间的状态。这可能是在一个平面文件中,它读/写,或通过一些外部数据库,它连接到。

  • 或者,您可以embed the Bokeh serve as a library在这种情况下,您可以为自己的新端点添加新的请求处理程序到底层的Tornado应用程序。这些处理程序可以保存/累积状态(当Bokeh服务器正在运行时)。如何将更新推送到任何现有的开放会话是一个更复杂的问题,这取决于您的需求。

相关问题 更多 >

    热门问题