Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 博克+;Flask:多个AjaxDataSource调用_Python_Streaming_Bokeh - Fatal编程技术网

Python 博克+;Flask:多个AjaxDataSource调用

Python 博克+;Flask:多个AjaxDataSource调用,python,streaming,bokeh,Python,Streaming,Bokeh,Bokeh对象是显示3条独立直线的图形 数据流。AjaxDataSource调用每5秒更新一次数据,从数据库读取最后一个数据 这是精简的课程: class Graph: def __init__(self): data_source = AjaxDataSource(data=dict(date_time=[], value_1=[],

Bokeh对象是显示3条独立直线的图形

数据流。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\u time
是公共x轴,
value\u 1
是第1行,
value\u 2
是第2行,
value\u 3
是第3行

问题

为什么
AjaxDataSource
被调用了3次(间隔几毫秒,然后在5秒后再次进行三重读取),而不是每5秒只调用一次

我认为AjaxDataSource每5秒动态填充一次
data\u source.data
,然后在读取之后,这3行读取这些“现在是静态”数据

解决方法?

是否有一种方法可以使用AjaxDataSource读取数据,自动将数据传输到ColumnDataSource并将其用作“静态”数据源


还是我遗漏了一些重要的内容?

问题是,每个连接有远程数据源的glyph都会尝试初始化数据源。对于
AjaxDataSource
,它不检查以前的初始化

我已经为它打开了一个问题:

您可以尝试的临时解决方法:

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);
    }
}
确保此代码在页面中包含Bokeh之后,但在其初始化文档之前立即运行。如何做到这一点取决于如何嵌入Bokeh