python - 使用另一个脚本的输出更新散景图
问题描述
我的目标是创建一个散景脚本,显示我网络中几台机器的处理器和内存使用情况。第一个脚本提取 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 文件,然后让散景脚本读取它并将该数据附加到绘图中。我想知道是否有更好的方法。
解决方案
由于更新脚本只是获取一些数字,因此您最好的选择可能是将那个东西包装在更新函数中,处理这些数字以使其适合 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)
推荐阅读
- c# - 如何从固定高度容器溢出阴影
- git - 如何仅在子目录中运行 husky 预提交
- excel - 找到等于 0 的目标值的组合,VBA
- php - 如何创建重写规则以将不带日期的 URL 更改为带日期的 URL
- javascript - 如何获取 JSON 数组中的第一个密钥对?
- php - 带有白色背景且未集中的 PHP 缩略图
- python - 如何在 django 中设置模型对象删除的时间限制?
- freebsd - 修复容易出现 CVE-2018-16868 的 gnutls
- ruby-on-rails - 从 Rails 4 迁移后,附加运算符“<<”不再将 AssociationRelation 转换为数组并在 Rails 5 上自动添加对象
- swagger - Swagger 从没有注释的 YAML 规范生成代码