创建在单元格运行后更改的Jupyter Notebook对象

时间:2015-12-02 02:00:45

标签: ipython ipython-notebook jupyter

我想创建一个在Jupyter笔记本中异步更新的进度条(带有ipython内核)

实施例

In [1]: ProgressBar(...)
Out[1]: [|||||||||------------------]  35%  # this keeps moving

In [2]: # even while I do other stuff

我计划启动后台线程来检查和更新进度。我不确定如何更新渲染的输出(或者即使这是可能的。)

1 个答案:

答案 0 :(得分:3)

这可能有助于让你走上正确的轨道,代码来自lightning-viz,它从matplotlib借了很多。警告这一切都很糟糕。

在python中,你必须实例化一个comm对象

from IPython.kernel.comm import Comm
comm = Comm('comm-target-name', {'id': self.id})

这里的完整代码https://github.com/lightning-viz/lightning-python/blob/master/lightning/visualization.py#L15-L19。如果您想要管理多个不同的进度条,那么id就在那里。

然后在javascript中执行相同操作:

var IPython = window.IPython;

IPython.notebook.kernel.comm_manager.register_target('comm-target-name', function(comm, data) {
      // the data here contains the id you set above, useful for managing
      // state w/ multiple comm objects

      // register the event handler here
      comm.on_msg(function(msg) {
      })
});

这里有完整的例子。请注意,javascript on_msg代码未经测试,因为我只使用了comm来自js - >蟒蛇。要查看该处理程序的外观,请参阅https://github.com/lightning-viz/lightning-python/blob/master/lightning/visualization.py#L90

最后在python中发送消息:

comm.send(data=data)

https://ipython.org/ipython-doc/3/api/generated/IPython.kernel.comm.comm.html#IPython.kernel.comm.comm.Comm.send