我正在开发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
对于批量处理更有用:{{3} }
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,但由于https://github.com/bokeh/bokeh/blob/master/examples/howto/hold_app.py,它是不可能的。所以实现这一目标的唯一方法是只使用this filtering behaviour中描述的一个CDS?然后,我需要在当前源中添加许多列,这些列的大多数数据都会有NaN
个值,这有点难看。
有更好的方法吗?
time.sleep
错误。答案 0 :(得分:0)
如何按IFS
延迟代码:
add_timeout_callback
答案 1 :(得分:0)
最后我找到了解决方案。我使用Multiline
字形解决了这个问题。像这样我只需要使用ColumDataSource
来进行所有行更新。它效率更高,应用程序不会崩溃。
注意:但我找到了另一个setback