我发现以下帖子非常有帮助: 如何腌制自己?
但是,此解决方案的局限性在于,当类重新加载时,它不会以其“运行时”状态返回。即它将重新加载所有变量等以及在它被转储的那一刻类的一般状态..但它不会从那时起继续运行。
考虑:
class someClass(object):
def doSomething(self):
i = 0
while i <= 20:
execute
i += 1
if i == 10:
self.dumpState()
def dumpState(self):
with open('somePickleFile','wb') as handle:
pickle.dump(self, handle)
@classmethod
def loadState(cls, file_name):
with open(file_name, 'rb') as handle:
return pickle.load(handle)
如果上面运行,通过创建 someClass 的实例:
sC = someClass()
sC.doSomething()
sC.loadState('somePickleFile')
这不会将类返回到其运行时状态,它不会继续执行 while 循环,直到 i == 20..
这可能不是正确的方法,但我正在尝试找到一种方法来捕获我的程序的运行时状态,即冻结/休眠它,然后在可能将其移动到另一台机器后重新启动它。这是由于我遇到的问题由不支持检查点的集群上的排队系统强制执行的时间限制。