假设我在Jupyter/Ipython笔记本中进行了更大规模的数据分析,并完成了大量耗时的计算.然后,出于某种原因,我必须关闭jupyter本地服务器I,但是我想稍后返回进行分析,而不必再次进行所有耗时的计算.
我想什么想爱做的是pickle
或存储整个Jupyter会话(所有大熊猫dataframes,np.arrays,变量,...),所以我可以放心地关闭服务器知道我可以在完全相同的状态返回到我的会话之前.
它在技术上是否可行?我忽略了内置功能吗?
编辑:根据这个答案,有一个%store
魔术应该是"轻量级泡菜".但是,您必须手动存储变量,如下所示:
#inside a ipython/nb session
foo = "A dummy string"
%store foo
关闭视频,重新启动内核#r
%store -r foo
进行刷新
print(foo) # "A dummy string"
这与我想要的非常接近,但是必须手动完成并且无法区分不同的会话会使它变得不那么有用.
我认为迪尔很好地回答了你的问题.
pip install dill
保存笔记本会话:
import dill dill.dump_session('notebook_env.db')
恢复Notebook会话:
import dill dill.load_session('notebook_env.db')
资源
(我更愿意发表评论,而不是将其作为实际答案,但我需要更多的声誉来评论.)
您可以系统地存储大多数类似数据的变量.我通常做的是将所有数据帧,数组等存储在pandas.HDFStore中.在笔记本的开头,声明
backup = pd.HDFStore('backup.h5')
然后在生成变量时存储任何新变量
backup['var1'] = var1
最后,可能是个好主意
backup.close()
在关闭服务器之前.下次要继续使用笔记本时:
backup = pd.HDFStore('backup.h5') var1 = backup['var1']
说实话,我也更喜欢ipython笔记本中的内置功能.你无法以这种方式保存所有东西(例如对象,连接),并且很难用如此多的样板代码来保持笔记本的组织.
这个问题与以下内容有关:如何在IPython Notebook中缓存?
为了保存单个单元格的结果,缓存魔法派上用场.
%%cache longcalc.pkl var1 var2 var3 var1 = longcalculation() ....
重新运行笔记本时,将从缓存中加载此单元格的内容.
这并不能完全回答您的问题,但是当所有冗长计算的结果快速恢复时,它可能就足够了.结合使用笔记本顶部的run-all按钮对我来说是一个可行的解决方案.
缓存魔法救不了整个笔记本的状态还没有.据我所知,还没有其他系统可以恢复"笔记本".这将需要保存python内核的所有历史记录.加载笔记本并连接到内核后,应加载此信息.