bokeh несколько потоковых графиков в реальном времени в разных объектах / процедура обновления реестра, расположенная в другом классе - PullRequest
0 голосов
/ 20 июня 2020

Я использую python и боке для реализации потокового построения графиков в реальном времени. Я хочу включить несколько живых графиков в сетку и натолкнуться на своего рода «смертельную блокировку». Графики (их много) создаются разными классами, и объекты-фигуры возвращаются, а затем используются в качестве входных данных для функции gridplot (). Для построения графиков в реальном времени curdo c (). Add_periodic_callback (update1, 300) ссылается на процедуру обновления. Я вызываю подпрограммы обновления других графиков непосредственно из update1 (). Это работает, но постоянно вызывает следующую ошибку: raise RuntimeError («_ pending_writes не должно быть None, когда у нас есть блокировка документа, и у нас должна быть блокировка при изменении документа») builtins.RuntimeError: _pending_writes не должно быть None, когда мы есть блокировка документа, и у нас должна быть блокировка при изменении документа. Это ожидаемое поведение, поскольку данные других графов изменяются «вне» их объекта и из «незарегистрированной процедуры обновления». Я хочу избавиться от этой ошибки. В моем основном объекте (где макет собран вместе и вызывается curdo c (). Add_ root ()) я намерен зарегистрировать другие подпрограммы обновления графиков (которые должны быть обычными подпрограммами объекта, чтобы они могли ссылаться.) через curdo c (). add_periodic_callback (). Проблема с этим подходом заключается в том, что функции обновления объектов принимают параметр self, а боке это не принимает. Тем не менее, я не могу сделать это без себя, потому что update () должен ссылаться на объект source.stream.

Я не знаю, как решить эту проблему или сделать это «правильным» способом. Предложения приветствуются.

спасибо

за разъяснения:

основной объект: def graph (self): .... код боке @count () def update (t) : .... обновить код curdo c (). add_ root (gridplot ([[l [0]], [l [1]]], toolbar_location = "left", plot_width = 1000)) curdo c (). Add_periodic_callback (update, 300)

это работает

generi c другой объект

def graph (self): .... код боке

def update (self, t): ....

главный объект: curdo c (). Add_periodic_callback (other_object.update, 300)

это НЕ работа.

...