0

私は多かれ少なかれ継続的に実行する必要があるプログラムを書いています。プログラムを終了した場合、またはエラーがスローされた場合は、すべてのオブジェクト インスタンスを保存する必要があります。そのために、jsonpickle を使用してすべてのインスタンスを保存します。プログラムが続くときは、中断したところから続けたいと思います。私の考えは、次のようなことをすることでした:

class A(object):
    def __init__(self):
       try:
            with open('A.json', 'r') as fp:
                 self = jsonpickle.decode(json.load(fp))
       except IOError:
            self.X = 'defaultvalue'
            self.Y = 'defaultvalue'

A.json には、以前に jsonpickle を使用して保存された A のインスタンスが含まれています (その部分は機能します)。ただし、self は私のコードによって上書きされません。

__new__ でやりたいことを実装する必要があると思います。ドキュメントを読みましたが、少し迷っています。私が望むものを良い方法で実装する方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

0

jsonpicle についてはわかりませんが、JSON を使用すると、次のようなことができます。

import json

class ClassA(object):
    def __init__(self):
       try:
            with open('A.json', 'r') as fp:
                 self.__dict__ = json.loads(fp.read())
       except IOError:
            self.X = 'defaultvalue'
            self.Y = 1

    def __del__(self):
       with open('A.json', 'wb') as fp:
          fp.write( json.dumps( self.__dict__) )

if __name__ == "__main__":       
   myobj  = ClassA()
   print "GOT X : " + str(myobj.X)
   print "GOT Y : " + str(myobj.Y)
   myobj.X += " RUN ME AGAIN "
   myobj.Y += 1
   myobj = None

__del__はガベージ コレクターによって呼び出されることに注意してください。少なくとも私にとっては、そこにいなければ完全に失敗しましたmyobj = None

とにかく、シャットダウン時にいつでもディスクにデータを書き込むことができると仮定すると、問題が発生します。電源プラグを抜くとどうなるか考えてみてください。できるだけ早く書き込みを行うことをお勧めします (そして、変更がディスクにも確実に書き込まれるように、フラッシュ関数を呼び出します)。

于 2014-09-24T13:45:34.347 に答える