я нашел следующее сообщение чрезвычайно полезно: How to pickle yourself?Травление себя и возвращение в состояние Run?
однако ограничение этого решения является то, что при перезагрузке класса, он не возвращается в «выполнении» состоянии. то есть он перезагрузит все переменные и т. д. и общее состояние класса в момент его сброса .. но он не будет продолжать работать с этой точки.
Рассмотрим:
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 loop до i == 20 ..
Возможно, это неправильный подход, но я пытаюсь найти способ захватить текущее состояние моей программы, то есть заморозить/спящий режим, а затем перезагрузить ch it, возможно, переместив его на другую машину. Это связано с проблемами, которые у меня есть с ограничениями времени, введенными в действие системой очередей в кластере, которая не поддерживает контрольную точку.
Спасибо .. Я попробовал это, и он работает по большому счету для того, что мне нужно ... спасибо. – aurobhima
Просто получил электронное письмо в списках Python со связанным объектом - проверьте http://bugs.python.org/issue14288 - вполне возможно, что python 3.3 может добавить поддержку итераторов травления и упростить рассортирование рабочих состояний , – jsbueno