Я нашел следующий пост чрезвычайно полезным: Как замариновать себя?
однако ограничение этого решения заключается в том, что при перезагрузке класса он не возвращается в свое состояние «времени выполнения». то есть он перезагрузит все переменные и т. д., а также общее состояние класса на момент его сброса... но с этого момента он не продолжит работу.
Рассмотреть возможность:
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..
Возможно, это неправильный подход, но я пытаюсь найти способ зафиксировать состояние выполнения моей программы, то есть заморозить/перевести ее в спящий режим, а затем перезапустить ее после возможного перемещения на другую машину. Это связано с проблемами, которые у меня есть. с временными ограничениями, наложенными системой очередей на кластер, который не поддерживает контрольные точки.