3

サーバーの再起動後も存続する「最後の既知の」カウンターを Python で使用する方法はありますか?

スケジュールに従って(cronによって)起動されるpythonスクリプトがあります。事前定義された形式のドキュメント ID を持つファイルを読み取ります。以前の文書がある場合はすべて無視するために、最後に処理された文書 ID を覚えておく必要があります。

4

2 に答える 2

4

再起動後も存続させたい値は、永続的なストレージ、つまりディスクに入れる必要があります。これは、単純なプレーンテキスト ファイルであろうとデータベース ファイルであろうと、ある種のファイルを意味します。コメントで、これが「クロスプラットフォーム」であるとは思わないことを示しましたが、実際には、ある種のファイルシステムのサポートがない奇妙なプラットフォームになるでしょう。

構造化ストレージが必要な場合は、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 の場合は、プレーンテキスト ファイルに固執します。実際には、それ以上の互換性はありません。

于 2013-03-21T11:01:28.913 に答える
1

データベースまたはファイルに保存します。ファイルに書き込むこともできます。ConfigParserまたはを使用することを選択できますcsv。または、使用することを選択することもできますshelve(使いやすくて簡単です。永続的なストレージが必要な場合は、これが最も簡単かもしれません)。他にもオプションがあります。標準ライブラリが提供するものを見て、その感触をつかんでください。結果を保存するファイルを指定する必要があり、権限も適切である必要がありますが、難しいことではありません。

于 2013-03-21T11:00:24.190 に答える