使用另一个脚本的输出更新散景图

时间:2018-05-15 13:44:17

标签: python bokeh

我的目标是创建一个散景脚本,显示网络中多台机器的处理器和内存使用情况。第一个脚本提取cpu和内存使用情况,散景脚本显示过去几秒内这些​​统计数据的时间序列图。

我复制粘贴一些散景代码(感谢互联网),每500秒根据随机数更新两行图:

import numpy as np
from bokeh.plotting import figure, curdoc
from bokeh.driving import linear
from bokeh.layouts import layout
import random
tools = 'pan'

@linear()
def update(step):
    # Instead of random numbers, fetch stats from another script                                                      
    ds1.data['x'].append(step)
    ds1.data['y'].append(random.randint(0,100))
    ds2.data['x'].append(step)
    ds2.data['y'].append(random.randint(0,100))
    ds1.trigger('data', ds1.data, ds1.data)
    ds2.trigger('data', ds2.data, ds2.data)
# don't get this yet, but @linear is a decorator. Instead of having @linear(), we could also have                     
# update = linear(update)                                                                                             

p = figure(plot_width=400, plot_height=400)
r1 = p.line([], [], color="firebrick", line_width=2, legend='line1')
r2 = p.line([], [], color="navy", line_width=2, legend='line2')


ds1 = r1.data_source
ds2 = r2.data_source

curdoc().add_root(  p  )

# Add a periodic callback to be run every 500 milliseconds                                                            
curdoc().add_periodic_callback(update, 500)

假设第一个脚本每500毫秒提取内存/ CPU使用的元组,我将如何获取散景脚本来获取该信息?一旦我掌握了这些信息,我就会被设定。

我现在唯一的想法是将第一个脚本的输出写入dict / json / h5文件,并让散景脚本读取它并将该数据附加到绘图中。我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

由于更新脚本只是抓取一些数字,你最好的选择可能是将这个东西包装在更新函数中,处理这些数字使它们适合ColumnDataSource,然后更新主CDS,然后更新绘图。类似的东西:

def update():
    # Do stuff to get new data
    numbers = get_usage()

    # Process new data into a CDS friendly format
    data1, data2 = process_numbers(numbers)

    # Update plot_source, this being whatever source is 
    r1_source.data = data1
    r2_source.data = data2

curdoc().add_periodic_callback(update, 500)