具有动态数据源更新的Bokeh应用程序

Ame*_*ina 2 python python-3.x bokeh

考虑一下sliders_app.pyBokeh中的例子.我希望能够定期更新绘图.例如,假设我们想要每10秒对绘图进行一次时移.我如何在应用程序的上下文中执行此操作?

为了说明目标,我想在应用程序中添加以下非常简单的逻辑,只需循环移动X和Y.

请注意,没有简单的方法将此循环插入原始循环sliders_app.py(它会去哪里?).

  while True:
    N = 200
    # Get the current slider values
    a = self.amplitude.value
    b = self.offset.value
    w = self.phase.value
    k = self.freq.value

    # Circularly time-shift X and Y 
    x = self.source.data["x"]
    x = np.roll(x,1)
    y = a*np.sin(k*x + w) + b 

    # Update the data container for the plot
    self.source.data = dict(x=x, y=y)

    # Sleep until the next update
    time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)

在Bokeh有什么办法吗?Bokeh是否可能有任何计时器小部件可以连接计时器回调以更新数据源?

如果没有,是否有计划在未来一段时间内使用此功能?

更新

它看起来像spectrogram.py使用线程来处理这种类型的更新.对于任何有兴趣的人来说,这可能是解决它的方法.

big*_*dot 5

有几个选择.这AjaxDataSource可以导致客户端定期直接从REST端点提取.这是一个显示其用途的示例:

https://github.com/bokeh/bokeh/blob/master/examples/plotting/file/ajax_source_realtime.py

请注意,谱图可能很快就会被重写以使用它,并减少手工编写的JS数量.(谱图相当复杂,有一些自定义JS,我们总是试图随着时间的推移减少这个数量)

还值得一提的是,频谱图中的线程与服务器方面有关,它与Bokeh本身没有任何关系,或者与Bokeh的更新有关.

如果您在Bokeh服务器中运行应用程序,您可以随时更新数据源模型,并且情节会响应.