python 中的可加载程序检查点(可序列化 continuations/program 图像)
Loadable program checkpoints in python (serializable continuations/program images)
假设我有一个 python 程序执行以下操作:
do_some_long_data_crunching_computation()
call_some_fiddly_new_crashing_function()
有没有办法 "freeze" 并序列化 python 程序的状态(所有全局变量等)在第一个长计算的 return 点之后,然后重新迭代你的开发新功能并从这里重新开始执行程序?
这个有点可能,如果你是运行解释器的程序,但是还有别的办法吗?
嗯,没有。
重点是 Python 和您的 OS 并非没有副作用(它实际上什至不是远程功能,尽管它具有函数式语言的某些功能),所以在这种情况下,恢复程序状态实际上不起作用。您基本上必须重新 运行 该程序,并使用您上次启动它时的计算机状态。
现在,您要做的是,在长时间操作之后,您可以使用 pickle
或类似方法保存对您很重要的变量的状态。
现在,我知道您想避免关心要存储什么以及如何恢复它,但这基本上是不干净设计的标志:您应该尽可能存储计算状态在单个状态对象中;然后序列化和反序列化就很容易了。不要将计算状态存储在全局变量中!
假设我有一个 python 程序执行以下操作:
do_some_long_data_crunching_computation()
call_some_fiddly_new_crashing_function()
有没有办法 "freeze" 并序列化 python 程序的状态(所有全局变量等)在第一个长计算的 return 点之后,然后重新迭代你的开发新功能并从这里重新开始执行程序?
这个有点可能,如果你是运行解释器的程序,但是还有别的办法吗?
嗯,没有。
重点是 Python 和您的 OS 并非没有副作用(它实际上什至不是远程功能,尽管它具有函数式语言的某些功能),所以在这种情况下,恢复程序状态实际上不起作用。您基本上必须重新 运行 该程序,并使用您上次启动它时的计算机状态。
现在,您要做的是,在长时间操作之后,您可以使用 pickle
或类似方法保存对您很重要的变量的状态。
现在,我知道您想避免关心要存储什么以及如何恢复它,但这基本上是不干净设计的标志:您应该尽可能存储计算状态在单个状态对象中;然后序列化和反序列化就很容易了。不要将计算状态存储在全局变量中!