Такой подход не будет возможен только с Pickle и Unpickle, если ваш код не знает об этом.
Pickle может сохранять фундаментальные объекты Python и обычные пользовательские классы, которые ссылаются на эти фундаментальные типы.Но он не может заморозить информацию о работающем контексте так, как вы хотите.
Python допускает ограниченные (но мощные) способы доступа к контексту работающего кода через его объекты фреймов - вы можете получить объект фрейма с помощью вызова«inspect.currentframe» в модуле проверки.Это позволит вам увидеть текущую бегущую строку кода, локальные переменные, содержимое локальных переменных и т. Д. - но внутри чистого python нет никакого способа, не прибегая к необработанным манипуляциям с памятью структур данных интерпретатора Python для восстановленияфрейм со средним исполнением и переход к исполнению.
Так что - для этого подхода было бы лучше "заморозить" весь процесс и его структуры данных в памяти, используя способ ОС для этого (возможно, существуетпуть к этому в Linux, и он должен работать без файлов / файлов, подобных ресурсам, используемым процессом).
Или из Python, как вы хотите, вы должны вести «бухгалтерский контроль» всех ваших данных о состоянии таким образом, чтобы Pickle мог «увидеть его».В вашем базовом примере вы должны реорганизовать свой код в нечто вроде:
class someClass(object):
def setup(self):
self.i = 0
def doSomething(self):
while self.i <= 20:
execute
i += 1
if i == 10:
self.dumpState()
...
@classmethod
def loadState(cls, file_name):
with open(file_name, 'rb') as handle:
self = pickle.load(handle)
if self.i <= 20: # or other check for "running context"
return self.doSomething()
Принципиальное отличие здесь заключается в учете локальной переменной «i» в качестве переменной объекта и отделении кода инициализации.,Таким образом, все состояние, необходимое для продолжения выполнения - для этого небольшого примера - записывается в атрибутах объекта - которые могут быть правильно выбраны.