1

mod_python を使用して、Apache で Trac を実行しています。プラグインを開発していますが、グローバル変数がどのように保存/キャッシュされるかわかりません。

私はpythonが初めてで、件名をグーグルで調べたところ、mod_pythonがpythonモジュールをキャッシュしていることがわかりました(と思います)。ただし、Web サービスの再起動時にキャッシュがリセットされることを期待していますが、そうではないようです。リストであるグローバル変数があるため、リストをテストして値が存在するかどうかを確認し、存在しない場合は追加します。これを初めて実行したとき、リストに 3 つのエントリが追加されました。その後、リストには最初から 3 つのエントリがあります。

例えば:

globalList = []

class globalTest:

  def addToTheList(itemToAdd):
      print(len(globalTest))
      if itemToAdd not in globalList:
          globalList.append(itemToAdd)

  def doSomething():
    addToTheList("I am new entry one")
    addToTheList("I am new entry two")
    addToTheList("I am new entry three")

上記のコードは、実際のコードではなく、私が行っていることの単なる例です;-)。しかし、基本的に doSomething() メソッドは Trac によって呼び出されます。初めて実行したとき、3 つのエントリすべてが追加されました。現在 - Web サーバーを再起動した後でも、len(globalList) コマンドは常に 3 です。

Web サーバーの再起動後に Trac でページを更新すると、Trac がログインの詳細を記憶しているため、セッション (したがってグローバル変数) がキャッシュされている可能性があります。その場合、キャッシュを強制的にクリアするにはどうすればよいですか。globalList 変数を手動でリセットしたくないことに注意してください。globalList.length = 0

何が起こっているのかについて、誰かが洞察を提供できますか? ありがとうございました

4

2 に答える 2

3

それが言うmod-python faqを読んでください

グローバル オブジェクトは、Apache プロセスの存続期間中、mod_python 内に存在します。これは、一般に、単一の要求の存続期間よりもはるかに長くなります。これは、グローバル変数が毎回初期化されることを期待する場合、驚かれることを意味します....

リンクに移動 http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.005.htp

質問は、なぜグローバル変数を使用したいのですか?

于 2009-06-15T10:38:31.213 に答える