mod_wsgi/Python Web アプリケーションの奇妙な問題を突き止めようとしています。オブジェクトを作成してメソッドを呼び出すアプリケーション ハンドラーがあります。
def my_method(self, file):
self.sapi.write("In my method for %d time"%self.mmcount)
self.mmcount += 1
# ... open file (absolute path to file), extract list of files inside
# ... exit if file contains no path/file strings
for f in extracted_files:
self.num_files_found += 1
self.my_method(f)
この最初と最後に、私は書きます
obj.num_files_found
ブラウザへ。
したがって、これはファイル内のファイル参照のツリーをたどる再帰関数です。ファイル内のすべての参照が印刷され、次にそれらの参照が開かれて調べられ、すべてのファイルがファイルを含まないリーフノードになるまで続きます。なぜ私がこれを行っているかはあまり重要ではありません...これはより衒学的な例です。
出力が決定論的であると期待するでしょう
そのような
Files found: 0
In my method for the 0 time
In my method for the 1 time
In my method for the 2 time
In my method for the 3 time
...
In my method for the n time
Files found: 128
そして、最初のいくつかのリクエストについては、期待どおりです。次に、リフレッシュする限り、次のようになります
Files found: 0
In my method for the 0 time
Files found: 128
私は知っていますが、以前の更新とコード/ファイルの変更がないことから、128個のファイルを列挙するのにn回かかることがわかっています。
それでは質問です: mod_wsgi/Python には、完全な実行を停止する内部最適化が含まれていますか? 出力が決定論的でキャッシュされていると思いますか?
注意点として、期待通りのリフレッシュでは、REMOTE_PORT が 1 ずつインクリメントされます。短い出力を使用すると、REMOTE_PORT のインクリメントが激しくジャンプします。関係ないかもしれませんが。
私はPythonが初めてなので、優しくしてください
解決済み
それが何であるかは誰にもわかりませんが、Apache、mod_python、mod_wsgi、および HTTP 関連のほぼすべてをリッピングして再インストールすると、問題が修正されました。何かがかなり壊れていましたが、今は大丈夫です:)