保存和加载python内存的功能?

时间:2014-01-08 10:23:28

标签: python numpy

我在python中编写了一个程序需要几个小时来计算。我现在希望程序不时保存所有内存(主要是numpy-arrays)。这样我就可以从最后一次保存发生的那一刻开始重新计算。我不是在寻找像'numpy.save(file,arr)'这样的东西,而是一种一次性保存所有内存的方法......

亲切的问候, 的Mattias

2 个答案:

答案 0 :(得分:1)

我同意@phyrox,可以使用dill将您的活动对象保存到磁盘,以便稍后重新启动。 dill可以使用numpy序列化dump()数组,并使用dump_session()序列化整个解释器会话。

然而,听起来你真的在问某种形式的缓存......所以我不得不说@Alfe的评论可能更接近你想要的。如果您想要无缝缓存和将数组存档到内存......那么您需要joblibklepto

klepto建立在dill之上,可以将函数输入和输出缓存到内存中(这样计算不需要运行两次),它可以无缝地持久化对象。缓存到磁盘或数据库。

github上的版本是你想要的。 https://github.com/uqfoundation/kleptohttps://github.com/joblib/joblib。 Klepto比较新,但拥有比joblib更广泛的缓存和归档解决方案。 Joblib已经在生产中使用更长时间,因此它经过了更好的测试 - 特别是对于并行计算。

以下是典型的klepto工作流程示例:https://github.com/uqfoundation/klepto/blob/master/tests/test_workflow.py

这是另一个有numpy的内容: https://github.com/uqfoundation/klepto/blob/master/tests/test_cache.py

答案 1 :(得分:0)

Dill可以是您的解决方案:https://pypi.python.org/pypi/dill

  

Dill为用户提供与'pickle'模块相同的界面,并且   还包括一些额外的功能。除了酸洗蟒蛇   对象,dill提供了保存解释器状态的能力   单个命令中的会话。因此,保存一个是可行的   解释器会话,关闭解释器,将pickle文件发送到   另一台计算机,打开一个新的翻译,取消会议和   从而继续从原始翻译的“保存”状态   会话。

一个例子:

import dill as pickle;
from numpy import array;

a = array([1,2]);
pickle.dump_session('sesion.pkl')
a = 0;
pickle.load_session('sesion.pkl')
print a;
  

由于dill符合'pickle'界面,例子和   http://docs.python.org/library/pickle.html上的文档也适用   如果一个人将import dill as pickle

请注意,您无法保存多种类型的数据。先检查一下。