サーバーの再起動後も存続する「最後の既知の」カウンターを Python で使用する方法はありますか?
スケジュールに従って(cronによって)起動されるpythonスクリプトがあります。事前定義された形式のドキュメント ID を持つファイルを読み取ります。以前の文書がある場合はすべて無視するために、最後に処理された文書 ID を覚えておく必要があります。
サーバーの再起動後も存続する「最後の既知の」カウンターを Python で使用する方法はありますか?
スケジュールに従って(cronによって)起動されるpythonスクリプトがあります。事前定義された形式のドキュメント ID を持つファイルを読み取ります。以前の文書がある場合はすべて無視するために、最後に処理された文書 ID を覚えておく必要があります。
再起動後も存続させたい値は、永続的なストレージ、つまりディスクに入れる必要があります。これは、単純なプレーンテキスト ファイルであろうとデータベース ファイルであろうと、ある種のファイルを意味します。コメントで、これが「クロスプラットフォーム」であるとは思わないことを示しましたが、実際には、ある種のファイルシステムのサポートがない奇妙なプラットフォームになるでしょう。
構造化ストレージが必要な場合は、SQLite サポートが Python のsqlite3
モジュールに組み込まれています。ただし、単一の ID を保存するだけでよいように思われるため、単純なファイルで十分です。私は次のようなことを提案します:
import os
DATA_FILENAME = os.path.expanduser("~/document-counter.txt")
def update_document_id(new_id):
with open(DATA_FILENAME, "w") as fd:
fd.write(new_id + "\n")
def retrieve_document_id():
with open(DATA_FILENAME, "r") as fd:
return fd.readline().strip()
おそらくより適切なエラー チェックを行う必要があります (たとえば、ファイルが存在しない場合にスローされる例外をキャッチするなど)。例外をキャッチする方が良いです ( EAFPはLBYLよりも Pythonic と見なされることがよくあります) が、たとえばファイルの存在を明示的に確認したい場合は、移植可能な方法でも簡単です。
if not os.path.exists(DATA_FILENAME):
print "No file found. Deal with it."
後でデータ フィールドを追加する必要がある場合は、SQLite をお勧めします。SQLite は便利で堅牢で、将来必要になった場合に他の言語のアプリケーションと相互運用できます。さらに、必要に応じて、スタンドアロンの SQLite コマンドライン クライアントを使用してデータを操作できます。メソッドにファイル名を指定するだけsqlite3.connect()
なので、基本的にファイルを開くのと同じくらい簡単です。その後、SQL をスローするだけです。
ただし、単純な単一の ID の場合は、プレーンテキスト ファイルに固執します。実際には、それ以上の互換性はありません。