Я использую 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()