Сервер bokeh и фляга: получить доступ к атрибуту bokeh после отправки - PullRequest
0 голосов
/ 29 ноября 2018

В настоящее время я начинаю разрабатывать веб-приложение на основе фляги, где я встраиваю графику, созданную на отдельном сервере bokeh, на котором запущены приложения bokeh на той же машине, что и приложение фляги.(сервер bokeh отличается от процесса на сервере-колбе)

Внутри колбы я получаю доступ / загружаю сеанс bokeh с помощью

session = pull_session(session_id=None, url='http://mybokehserver:5000/mybokeh')
script = server_session(session_id=session.id, url='http://mybokehserver:5000/mybokeh')

Типичный

return render_template('flask.html', title='Slider example in flask', form=form, script=script )

рендерингзатем страница в колбе.

Это успешно показывает, например, пример слайдера от команды bokeh на моей странице фляги.Ползунки работают, следовательно, обратные вызовы работают как положено.Следовательно, сервер колб является «клиентом bokeh» для моего понимания терминологии bokeh.

Теперь вопрос в том, как я могу получить доступ к атрибутам из виджетов bokeh, таким как значение ползунка для использования вПриложение сервера фляги после отправки формы.

Я искал в Интернете уже несколько дней, включая документацию по боке, но не смог найти пример или, по крайней мере, не узнал его, когда наткнулся на него.Кто-нибудь может указать мне правильное направление, пожалуйста?

1 Ответ

0 голосов
/ 05 декабря 2018

Еще через несколько дней я нашел питонический (или бокеонный) способ делать то, что мне нужно: решение заключается в том, чтобы «давать имена объектам» на стороне сервера bokeh.И запрашивая доступ к этим объектам by_name на стороне клиента.

Упрощенный пример на стороне сервера выглядит следующим образом:

from bokeh.plotting import figure, curdoc
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource

import numpy as np

x = np.zeros(2)
y = np.zeros(2)
v_src = ColumnDataSource(data=dict(x=x, y=y)) 

fig_v = figure(plot_width=600, plot_height=300)

fig_v.y_range.name = "y_range_v" # *** giving a name

fig_v.line('x','y',source=v_src, line_width=2,name="voltage") # *** giving a name

plot = gridplot([[fig_v],], toolbar_location='above')
curdoc().add_root(plot) 

Теперь я могу, например, получить доступ к объекту fig_v.line с его атрибутами и/ или объект fig_v.yrange через сеанс pull на стороне клиента (flask) и измените его, например:

with pull_session(session_id=None, url='http://192.168.3.1:5000/bk_serv') as session:
        script = server_session(session_id=session.id,url='http://192.168.3.1:5000/bk_serv')

        doc = session.document
        line = doc.get_model_by_name("voltage") # *** access via name
        line.data_source.data = dict(x=np.arange(len(some_x_data)), y=some_y_data)

        yrange = doc.get_model_by_name("y_range_v") # *** access via name
        yrange.start=min_somedata
        yrange.end = max_somedata

        return render_template('flask.html', form=form, script=script) 

Я не уверен в деталях, но соединение через веб-сокет, созданное bokeh, требуетзабота об обновлении сюжета.

Примечание: приведенный выше код является выдержкой из кода, который я написал.Он может не работать как есть, но я не могу опубликовать всю работу, и этот отрывок дает важную информацию.

...