2016-09-27 21 views
4

我与Bokeh 0.12.2在Jupyter笔记本工作所拥有并经常引发关于“模型只能由一个单一的文件所拥有的”例外:背景虚化:模型只能由一个单一的文件

--------------------------------------------------------------------------- 
RuntimeError        Traceback (most recent call last) 
<ipython-input-23-f50ac7abda5e> in <module>() 
     2  ea.legend.label_text_font_size = '10pt' 
     3 
----> 4 show(column([co2, co, nox, o3])) 

C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\io.py in show(obj, browser, new, notebook_handle) 
    308  ''' 
    309  if obj not in _state.document.roots: 
--> 310   _state.document.add_root(obj) 
    311  return _show_with_state(obj, _state, browser, new, notebook_handle=notebook_handle) 
    312 

C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in add_root(self, model) 
    443    self._roots.append(model) 
    444   finally: 
--> 445    self._pop_all_models_freeze() 
    446   self._trigger_on_change(RootAddedEvent(self, model)) 
    447 

C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in _pop_all_models_freeze(self) 
    343   self._all_models_freeze_count -= 1 
    344   if self._all_models_freeze_count == 0: 
--> 345    self._recompute_all_models() 
    346 
    347  def _invalidate_all_models(self): 

C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\document.py in _recompute_all_models(self) 
    367    d._detach_document() 
    368   for a in to_attach: 
--> 369    a._attach_document(self) 
    370   self._all_models = recomputed 
    371   self._all_models_by_name = recomputed_by_name 

C:\Users\pokeeffe\AppData\Local\Continuum\Anaconda3\lib\site-packages\bokeh\model.py in _attach_document(self, doc) 
    89   '''This should only be called by the Document implementation to set the document field''' 
    90   if self._document is not None and self._document is not doc: 
---> 91    raise RuntimeError("Models must be owned by only a single document, %r is already in a doc" % (self)) 
    92   doc.theme.apply_to_model(self) 
    93   self._document = doc 

RuntimeError: Models must be owned by only a single document, <bokeh.models.tickers.DaysTicker object at 0x00000000042540B8> is already in a doc 

触发器始终调用show(...)(尽管从不是内核启动后的第一次,只有后续调用)。

基于文档,我认为reset_output()会将笔记本恢复到可运行状态,但异常仍然存在。通过反复试验,我确定有必要重新定义传递给show()的所有内容。这使交互式工作繁琐且容易出错。

[Ref]:

reset_output(状态=无)

   清除所有输出模式的默认状态。

    返回:


  • 难道我说得对reset_output() - 是应该解决造成这种异常的情况?

  • 否则,我该如何避免这种异常?

+0

我的第一个建议是升级。 Bokeh和Notebook都是非常大型的,交叉运行的东西,并且将它们集成是一个持续改进的挑战。我知道从0.12.2开始已经有工作了,尽管我没有时间研究细节。否则,请发布一个完整的代码示例来检查/试用。例如,我知道多次显示同一个图的工作正常(我只是试图确定),所以如果没有测试笔记本来重现问题,就不可能推测出你的具体问题是什么。 – bigreddot

回答

0

可能是因为具有相同名称的冲突对象。你需要每次创建全新的对象。