2015-03-02 4 views
1

Я использую bokeh-сервер для обработки потоковой передачи данных через tcp на графики, которые в настоящее время отображаются в браузере с использованием output_server. Я хотел бы иметь возможность динамически добавлять дополнительные графики на текущую страницу браузера, поскольку данные поступают через сокет. Часть моей проблемы состоит в том, что я не совсем понимаю, как работают cursession() и curdoc()/как они отличаются.Bokeh 0.7.1: динамически добавлять график в Bokeh-Server Generated Existing Page

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

plots = [] 

if create_new_plot: 
     plots.append(create_new_plot_def()) 
if open_new_tab: 
     show(plots) 
     open_new_tab = False 
else: 
     curdoc().add(plots) 

Когда я запускаю это, я получаю ошибку, что «список» объект имеет атрибута 'ссылки. Чтобы исправить это, мне кажется, что мне придется перебирать и добавлять каждый сюжет отдельно, но это также не работает. plots[] содержит текущий список всех объектов сюжета, которые я хотел бы отображать в текущее время. Одна работа, которую я нашел, - это просто использовать show() каждый раз, но каждый раз открывает новую вкладку в моем браузере, что не является практичным/изящным.

Традиционно я использую cursession(). Add_object(), чтобы обновить источник данных на моих участках. Мне кажется, что cursession() имеет дело со всеми бэкендами данных, тогда как curdoc() контролирует фактическую визуализацию на странице. Это верно?

Есть ли способ вызвать отображение нового сюжета на той же самой странице браузеров, то есть документа? Может кто-нибудь объяснить, кратко, как правильно использовать cursession() и curdoc()? Благодаря!


Edit: Я нашел исправить, но до сих пор не может обойти нескольких show() вызовов, которые вызывают несколько вкладок браузера, чтобы открыть. Мой код теперь выглядит так:

if open_tab: 
    show(grid_plot) 
    open_tab = False 
else: 
    curdoc().clear() 
    curdoc().add(grid_plot) 
    show() 

ответ

1

Я нашел решение, используя push(), также в io.py. Новый фрагмент кода, который работает:

if open_tab: 
    show(grid_plot) 
    open_tab = False 
else: 
    curdoc().clear() 
    curdoc().add(grid_plot) 
    push() 

При этом страница HTML обновляется, а не вторая страница дубликат генерируется (новая вкладка).

Отметьте: https://groups.google.com/a/continuum.io/d/msg/bokeh/rMDt1sT5Cwk/fkKfS8yeTO8J для объяснения по curdoc() vs cursession(). Следите за документацией в ближайшее время.

Смежные вопросы