Bokeh - Периодический обратный вызов - данные не отображаются при вызове из функции - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь создать динамический график, используя сервер Bokeh

Этот код работает, когда я передаю ему два массива данных по осям x и y (а затем bokeh serve --show cursedfile.py):

p = figure(plot_width=400, plot_height=400, x_range = x_range, y_range = y_range)
r1 = p.line([], [], color="firebrick", line_width=2)
ds1 = r1.data_source
i = 0 
@linear()
def update(step):
    global i
    ds1.data['x'].append(xdata[i])
    ds1.data['y'].append(ydata[i])
    ds1.trigger('data', ds1.data, ds1.data)
    i = i + 1
curdoc().add_root(p)
curdoc().add_periodic_callback(update, 100)

Как только я попытаюсь поместить его в функцию внутри класса, а затем вызвать его, отобразится кадр, но данные не будут отображаться:

class Graph(object):
def __init__(self, dataset, **kwargs):
    self.dataset = dataset
    self.height =kwargs.get('height')
    self.width = kwargs.get('width')
    self.lats = dataset["lat"].tolist()
    self.lons = dataset["lon"].tolist()
    self.lat_range = None
    self.lon_range = None
    self.p = None
    self.r1 = None
    self.ds1 = None
    self.i = 0

@linear()       
def update(self, step):
    global i
    self.ds1.data['x'].append(self.lons[i])
    self.ds1.data['y'].append(self.lats[i])
    self.ds1.trigger('data', self.ds1.data, self.ds1.data)
    i = i + 1      

def animategraph(self):
    self.p = figure(plot_width=self.width, plot_height=self.height, x_range = self.lon_range, y_range = self.lat_range)
    self.r1 = self.p.line([], [], color="firebrick", line_width=2)
    self.ds1 = self.r1.data_source   
    curdoc().add_root(self.p)
    curdoc().add_periodic_callback(self.update, 1000)

Это ошибка, которую я получаю на сервере каждые 1000 мс

AttributeError: '_asyncio.Future' object has no attribute 'exc_info'
2018-10-20 15:01:11,595 Error thrown from periodic callback:
2018-10-20 15:01:11,595 Exception in callback functools.partial(<function wrap.<locals>.null_wrapper at 0x0BB65420>, <Future finished exception=TypeError('wrapper() takes 0 positional arguments but 1 was given')>)
Traceback (most recent call last):
  File "c:\users\xxx\appdata\local\programs\python\python37-32\lib\site-packages\tornado\ioloop.py", line 758, in _run_callback
    ret = callback()
  File "c:\users\xxx\appdata\local\programs\python\python37-32\lib\site-packages\tornado\stack_context.py", line 300, in null_wrapper
    return fn(*args, **kwargs)
  File "c:\users\xxx\appdata\local\programs\python\python37-32\lib\site-packages\bokeh\util\tornado.py", line 96, in on_done
    log.error("".join(format_exception(*future.exc_info())))
AttributeError: '_asyncio.Future' object has no attribute 'exc_info'

Я догадываюсь, что это связано с доступом «update к переменным» или с доступом animategraph к «update», поэтому я с ума схожупеременная инициализация.Я также попытался поместить «обновление» как определение в «анимацию», но без радости.

Любые предложения или указатели с благодарностью приняты!

...