假设我在Jupyter / Ipython笔记本中进行了更大规模的数据分析,并完成了大量耗时的计算 . 然后,出于某种原因,我必须关闭jupyter本地服务器I,但是我想稍后返回进行分析,而不必再次进行所有耗时的计算 .
我想要做的是 pickle
或存储整个Jupyter会话(所有pandas数据帧,np.arrays,变量......)所以我可以安全地关闭服务器,知道我可以在完全相同的状态下返回我的会话像之前一样 .
Is it even technically possible? Is there a built-in functionality I overlooked?
EDIT: 基于this回答有一个 %store
magic应该是"lightweight pickle" . 但是,您必须手动存储变量,如下所示:
#inside a ipython/nb session
foo = "A dummy string"
%store foo
关闭seeion,重启内核%store -r foo
#r用于刷新print(foo) # "A dummy string"
这与我想要的非常接近,但是必须手动完成并且无法区分不同的会话会使它变得不那么有用 .
3 回答
我认为迪尔很好地回答了你的问题 .
保存笔记本会话:
恢复Notebook会话:
Source
(我更愿意发表评论,而不是将其作为实际答案,但我需要更多的声誉来评论 . )
您可以系统地存储大多数类似数据的变量 . 我通常做的是在pandas.HDFStore中存储所有数据帧,数组等 . 在笔记本的开头,声明
然后在生成变量时存储任何新变量
最后,可能是个好主意
在关闭服务器之前 . 下次要继续使用笔记本时:
说实话,我也更喜欢ipython笔记本中的内置功能 . 你无法以这种方式保存所有东西(例如对象,连接),并且很难用如此多的样板代码来保持笔记本的组织 .
这个问题与以下内容有关:How to cache in IPython Notebook?
为了保存单个单元格的结果,caching magic派上用场了 .
重新运行笔记本时,将从缓存中加载此单元格的内容 .
这并不能完全回答您的问题,但是当所有冗长计算的结果快速恢复时,它可能就足够了 . 结合使用笔记本顶部的run-all按钮对我来说是一个可行的解决方案 .
缓存魔法无法保存整个笔记本yet的状态 . 据我所知,还没有其他系统可以恢复"notebook" . 这将需要保存python内核的所有历史记录 . 加载笔记本并连接到内核后,应加载此信息 .