我正在开发Bokeh服务器应用程序。我正在使用Bokeh 0.12.15。
问题描述
我有一堆数字,你可以在下面的图片中看到。当我选择一些点,一些轮廓线应该绘制在所有的情节。但问题是,正如你在这张图片中所看到的那样,它们会崩溃。

如果我放大这两个数字,它们就又恢复正常了。我认为这是一个同步问题。
我有一个ColumnDataSource (CDS)可用于所有的地块。每个配置文件都有自己的CDS。
这是代码片段,我在其中更新概要文件行的源数据,并使用所选的配置文件圈索引重新创建CDSview。这段代码每情节执行一次。如果表单中有4个地块,并且每个地块有3个配置文件,如果用户做出一些选择,就会有24个更新(每个CDS一个)。有没有办法一次更新所有内容以避免这个问题?
prof_len = len(prof_cds)
prof_to_show = []
for i in range(prof_len):
pos = NPROF - i - 1
self.prof_lines[pos].data_source.data = prof_cds[i].data
view = CDSView(source=self.env.source, filters=[IndexFilter(prof_indexes[i])])
self.prof_circles[pos].view = view
prof_to_show.append(pos)事实上,如果我这样做的话,我在睡眠中停顿一下,轮廓线就能正常工作了。
prof_len = len(prof_cds)
prof_to_show = []
import time
for i in range(prof_len):
pos = NPROF - i - 1
self.prof_lines[pos].data_source.data = prof_cds[i].data
lg.info('-- WAITING FOR UPDATE')
time.sleep(2)
view = CDSView(source=self.env.source, filters=[IndexFilter(prof_indexes[i])])
self.prof_circles[pos].view = view
prof_to_show.append(pos)

失败的解决办法
Bryan (Bokeh )告诉我要使用hold方法,但同样的问题也出现了。
我只看了一眼,但马上回答了你的最后一个问题,也许
hold和unhold可以更好地处理事情:app.py
self.env.doc.hold('combine')
for p_obj in self.env.bk_plots:
p_obj.plot_profile_lines(new.indices)
self.env.doc.unhold()结论
我认为这里的问题是,我正在使用一个CDS作为点和一个不同的CDS的轮廓线。我想使用同样的,并应用一些CDSView,但这是不可能的,因为this filtering behaviour。因此,实现这一目标的唯一方法是只使用this answer中描述的一个CDS?然后,我需要将许多列添加到当前源中,而且这些列的大多数数据都有NaN值,这有点难看。
有更好的方法吗?
更新04/12/2018
time.sleep中也会出错。发布于 2018-04-18 10:28:04
最后我找到了解决办法。我使用Multiline字形来解决这个问题。像这样,我只需要使用一个ColumDataSource来进行所有的行更新。它的效率更高,应用程序也不会崩溃。
Note:但我找到了另一个setback
发布于 2018-04-12 00:23:31
用add_timeout_callback延迟代码怎么样?
prof_len = len(prof_cds)
prof_to_show = []
import time
for i in range(prof_len):
pos = NPROF - i - 1
self.prof_lines[pos].data_source.data = prof_cds[i].data
def callback(i=i, pos=pos):
view = CDSView(source=self.env.source, filters=[IndexFilter(prof_indexes[i])])
self.prof_circles[pos].view = view
prof_to_show.append(pos)
curdoc().add_timeout_callback(callback, 100)https://stackoverflow.com/questions/49759896
复制相似问题