Я очень плохо знаком с циклами событий / обратными вызовами в целом.Я использую этот серверный подход, чтобы я мог легко запустить его в Pycharm, основываясь на другом посте.
Я хочу отобразить результаты итерационных алгоритмов для оптимизации пути gcode для физических перьевых плоттеров (проблема TS).
Поэтому мне нужно обновить график боке после завершения цикла алгоритма.Вот скрипт, основанный на других сообщениях, который обновляет данные всякий раз, когда срабатывает обратный вызов ползунка.В качестве замены для реальных данных он генерирует случайные значения.
import numpy as np
from bokeh.application import Application
from bokeh.application.handlers import FunctionHandler
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, Slider
from bokeh.plotting import figure
from bokeh.server.server import Server
from tornado.ioloop import IOLoop
io_loop = IOLoop.current()
def getData():
l = 50
x = np.random.rand(1, l)
y = np.random.rand(1, l)
return (dict(x=x, y=y))
def modify_doc(doc):
source = ColumnDataSource(data=getData())
plot = figure()
plot.line('x', 'y', source=source)
slider = Slider(start=1, end=10, value=1, step=0.1)
def callback(attr, old, new):
source.data = getData()
slider.on_change('value', callback)
doc.add_root(column(slider, plot))
bokeh_app = Application(FunctionHandler(modify_doc))
server = Server({'/': bokeh_app}, io_loop=io_loop)
server.start()
if __name__ == '__main__':
print('Opening Bokeh application on http://localhost:5006/')
io_loop.add_callback(server.show, "/")
io_loop.start()
Однако я не могу понять, где бы я поместил цикл / обратный вызов для обновления графика один раз за цикл, а не на основе вводас ползунка.Это должно быть что-то вроде
best-solution = []
for i in range(100):
run slow algorithm on best-solution
find best-result
update plot with best-result
best-solution = best-result
Заранее спасибо за любую помощь!