保存程序的状态以允许它恢复

时间:2011-04-06 15:27:43

标签: python state

我偶尔会遇到需要很长时间才能运行的Python程序,而且我希望能够保存状态并稍后恢复。有没有人有一个聪明的方法来保存状态每x秒,或程序退出?

4 个答案:

答案 0 :(得分:7)

将所有“状态”数据放在一个位置并使用pickle

  

pickle模块实现了一个基本但强大的算法,用于序列化和反序列化Python对象结构。 “Pickling”是将Python对象层次结构转换为字节流的过程,“unpickling”是反向操作,从而将字节流转换回对象层次结构。酸洗(和涂抹)也称为“序列化”,“编组”,1或“展平”,但为了避免混淆,这里使用的术语是“酸洗”和“涂抹”。

答案 1 :(得分:4)

如果要保存所有内容,包括整个命名空间和当前正在执行的代码行,可以随时重新启动,那么没有标准的库模块可以执行此操作。

正如另一张海报所说,pickle模块可以将所有内容保存到文件中,然后再次加载,但你必须专门设计你的程序围绕pickle模块(即保存你的“状态” - 包括变量,等等 - 在课堂上。)

答案 2 :(得分:1)

如果你对OOP没问题,可以考虑为每个输出序列化版本(使用pickle)的文件创建一个方法。然后添加第二种方法在实例中加载数据,如果存在pickle文件,则调用load方法而不是处理方法。 我对ML使用这种方法,它确实使我的工作流程变得非常重要。

答案 3 :(得分:0)

在传统编程方法中,在某个执行点之后保存变量或对象状态的明显方法是序列化。

因此,如果您想在某个已经计算很重的状态之后执行程序,我们只需从反序列化部分开始。

这些步骤大部分是在数据科学建模中最需要的,在该模型中,我们加载大量CSV或其他数据并对其进行计算,并且我们不想在每次运行程序时都重新计算。

http://jupyter.org/-一种无需您手动进行即可自动执行这些序列化/反序列化的工具。

您需要做的就是执行python代码的选定部分,让我们说10-15行,这取决于先前的1-9行。 Jupyter为您保存1-9的状态。探索教程并尝试一下。

相关问题