我想创建一个在Jupyter笔记本中异步更新的进度条(带有ipython
内核)
In [1]: ProgressBar(...)
Out[1]: [|||||||||------------------] 35% # this keeps moving
In [2]: # even while I do other stuff
我计划启动后台线程来检查和更新进度。我不确定如何更新渲染的输出(或者即使这是可能的。)
答案 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)