私は次のポストは非常に役に立った: How to pickle yourself?自己消化および実行状態に戻る?
この解決策の制限は、クラスが再ロードされたとき、それはその「ランタイム」の状態で返却されていないということですが。すなわち、それはダンプされた瞬間にすべての変数およびクラスの一般状態をリロードするが、その時点からは実行を継続しない。
考えてみましょう:
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)
を上記工assのインスタンスを作成することによって、実行された場合:これは、実行時の状態にクラスを返さない
sC = someClass()
sC.doSomething()
sC.loadState('somePickleFile')
、それはを通じて継続していませんwhileループはi == 20までです。
これは正しい方法ではないかもしれませんが、私のプログラムのランタイム状態をキャプチャする方法を見つけることを試みています。つまり、フリーズ/休止してからrelaunそれを別のマシンに移動した後にチャットしてください。これは、チェックポイントをサポートしていないクラスタ上のキューイングシステムによって強制される時間制限に関する問題が原因です。
ありがとう..私はこれを試してみて、それは私が必要とするもののために大きく働いています...ありがとう。 – aurobhima
関連オブジェクトを持つPythonリストに電子メールが届きました。http://bugs.python.org/issue14288をチェックしてください。Python 3.3がイテレーターをピクルリングするサポートを追加し、実行状態を簡単にすることができるかもしれません。 。 – jsbueno