Я хочу, чтобы Bokeh периодически и произвольно обновлялось, когда результаты отдельного алгоритма, работающего в python, возвращают результаты, не основываясь на каких-либо входных данных из интерфейса Bokeh.
Я пробовал различные решения, но все они зависят от обратного вызова какого-либо события пользовательского интерфейса или периодического обратного вызова, как показано в коде ниже.
import numpy as np
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Plot, LinearAxis, Grid
from bokeh.models.glyphs import MultiLine
from time import sleep
from random import randint
def getData(): # simulate data acquisition
# run slow algorith
sleep(randint(2,7)) #simulate slowness of algorithm
return dict(xs=np.random.rand(50, 2).tolist(), ys=np.random.rand(50, 2).tolist())
# init plot
source = ColumnDataSource(data=getData())
plot = Plot(
title=None, plot_width=600, plot_height=600,
min_border=0, toolbar_location=None)
glyph = MultiLine(xs="xs", ys="ys", line_color="#8073ac", line_width=0.1)
plot.add_glyph(source, glyph)
xaxis = LinearAxis()
plot.add_layout(xaxis, 'below')
yaxis = LinearAxis()
plot.add_layout(yaxis, 'left')
plot.add_layout(Grid(dimension=0, ticker=xaxis.ticker))
plot.add_layout(Grid(dimension=1, ticker=yaxis.ticker))
curdoc().add_root(plot)
# update plot
def update():
bokeh_source = getData()
source.stream(bokeh_source, rollover=50)
curdoc().add_periodic_callback(update, 100)
Кажется, это работает, но разве это лучший способ?Вместо того, чтобы Bokeh пытался обновлять каждые 100 миллисекунд, я могу просто вставить в него новые данные, когда они станут доступны?
Спасибо