ワイヤレスハンドヘルドコンピューターのサーバーとして動作しているPythonモジュールがあります。ハンドヘルドがサーバーにメッセージを送信するたびに、モジュールはメッセージの種類を判別し、適切な応答を組み立てます。応答は状態に依存することが多いため、各タイプのメッセージを処理する個々の関数間で情報を保持/共有するために必要な場合は、グローバル変数を使用しています。
私が抱えている問題は、アプリケーションが(何らかの理由で)閉じられると、グローバル変数の値が(もちろん)失われるため、アプリケーションを再起動すると、ハンドヘルドと同期しなくなります。回復のためにこれらの値を保存するための信頼できる方法が必要です。
私がこれまで行ってきた方向(ただし、まだ機能していません)は、変数名とその値を、更新されるたびに、ディスク上のCSVファイルに書き込むことです。起動)、そのファイルを探し、それを使用して変数を以前の状態に割り当てます。ファイルの書き込みや読み取りに問題はありませんが、何らかの理由で値が割り当てられていません。
コメント/ヘルプのコードを投稿することはできますが、その前に、そもそもまったく間違った方向に進んでいるかどうかを知りたいと思いました。これらの値を保存および回復するためのより良い(または少なくとも好ましい)方法はありますか?
ありがとう、JDM
====
フォローアップ。ちょっと不格好かもしれませんが、これが私が持っているもので、機能しています。私が気にかけているグローバルは、「CUR_」で始まるグローバルだけです。tempDict1
インタプリタが直接反復するのが好きではないように見えるので、私は使用しなければなりませんでしたglobals()
。
ピクルスをインポート CUR_GLO1 ='valglo1' CUR_GLO2 ='valglo2' CUR_GLO3 ='valglo3' def saveGlobs(): tempDict1 = globals()。copy() tempDict2 = {} tempDict1のキーの場合: if(key [:4] =='CUR_'):tempDict2 [key] = tempDict1 [key] pickle.dump(tempDict2、open('tempDict.p'、'wb')) def retrieveGlobs(): tempDict = pickle.load(open('tempDict.p'、'rb')) globals()。update(tempDict)