散景+烧瓶:多个AjaxDataSource调用

问题描述:

散景对象是一个显示3条独立线条的图形。散景+烧瓶:多个AjaxDataSource调用

数据流式传输。 AjaxDataSource调用每5秒钟从数据库读取最后一个数据。

这是剥离下来类:

class Graph: 
    def __init__(self): 

     data_source = AjaxDataSource(data=dict(date_time=[], 
               value_1=[], 
               value_2=[], 
               value_3=[]), 
               data_url="/data", 
               polling_interval=5000) 

     line1 = self.figure.line(x="date_time", y="value_1", source=data_source) 
     line2 = self.figure.line(x="date_time", y="value_2", source=data_source) 
     line3 = self.figure.line(x="date_time", y="value_3", source=data_source) 

     app.add_url_rule("/data", "/data", self.serve, methods=['GET', 'OPTIONS', 'POST']) 

    def serve(self): 

     # load data from db and return JSON 
     ... 
     return jsonify(
      date_time= da.df["Date_Time"].tolist(), 
      value_1=da.df["Value1"].tolist(), 
      value_2=da.df["Value2"].tolist(), 
      value_3=da.df["Value3"].tolist() 
     ) 

date_time是常见x轴,value_1为第1行,value_2为第2行,value_3为线3

问题

为什么AjaxDataSource调用了3次(它们相隔几毫秒,然后三次读数在5秒后再次完成)而不是每5秒一次?

我认为AjaxDataSource每5秒钟动态填充data_source.data,然后在读取完毕后,3行读取这些“现在是静态的”数据。

解决方法?

有没有办法使用AjaxDataSource读取数据,自动将数据传输到ColumnDataSource并将其用作“静态”数据源?

或者我错过了重要的东西吗?

问题是,每个带有远程数据源的字形都会尝试初始化数据源。在AjaxDataSource的情况下,它不检查以前的初始化。

我已经打开了一个问题吧:https://github.com/bokeh/bokeh/issues/6736

临时解决方法,你可以尝试:

Bokeh.require('models/sources/ajax_data_source').AjaxDataSource.prototype.setup = function() { 
    this.get_data(this.mode); 
    if (this.polling_interval && this.interval == null) { 
     return this.interval = setInterval(this.get_data, this.polling_interval, this.mode, this.max_size, this.if_modified); 
    } 
} 

确保被包含在你页面之后散景运行这些代码,但在其初始化文件之前。如何去做取决于你如何嵌入散景。

+0

解决方法完美无缺!谢谢尤金。 –