Python:如何保存对象状态并重用它

时间:2011-04-15 06:28:09

标签: serialization python

我想保存对象状态并在一段时间后重复使用它。 我在如何保存对象(Pickle模块)上得到了一些示例,我无法找到如何从保存状态恢复类/方法并继续进行。

与游戏类似,我们可以保存游戏,后者我们可以继续游戏,我知道在游戏中我们会保存所有数据并且游戏会读取数据并构建游戏。

我想保存完整的对象,当我恢复它时,它会从保存的状态开始工作。

例如

class Test(objet):
   def doSomeWork(self):
     index = 0
     while index < 99999:
        print index 
        index  += 1
        if saveCondition:
          # suppose when condition become True index value is 100
          saveCondition = None
          saveTheObjectToFile() # this might be saved in file
restoreClassObject = getSavedObject() # get object from file
# Now this should start printing from 100
# I want to resume the object state when it was saved.

2 个答案:

答案 0 :(得分:1)

最简单的方法是确保Object的状态不保存在本地范围中,而是保存为对象的属性。考虑

import cPickle

class Test(objet):
    def __init__(self, filename="mystate.pickle"):
        self.index = 0
        self.filename = filename

    def save(self):
        f = open(self.filename, 'w')
        cPickle.dump(self, f)
        f.close

    def doSomeWork(self):
        while self.index < 99999:
            print self.index 
            self.index  += 1
            if self.saveCondition:
              # suppose when condition become True index value is 100
              self.saveCondition = False
              self.save() # this might be saved in file

restoreClassObject = getSavedObject() # get object from file

当然doSomeWork没有任何意义,但是为了这个例子,想象一下这个方法是一个Thread,所以你仍然可以通过设置它restoreClassObject.saveCondition = True来保存它。下一步迭代步骤。

答案 1 :(得分:0)

CPython没有那种continuations that stackless所以你可能无法序列化整个程序状态并将其存储在文件中。

您必须编写某种图层,而不是将应用程序数据序列化,并将其放在文件中以实现保存。