大きなログ ファイルから検索文字列を検索する Python スクリプト (ここではスクリプトの後) を開発しています。通常の使用では、Hudson フロントエンドから呼び出されます。
Hudson インターフェースについて:
Hudson ジョブは、接続された仮想マシン (VM) に一時バッチ ファイルを作成し、スクリプトを呼び出していくつかのパラメーターを渡します。このセットアップを使用して何百もの成功したインスタンスがありましたが、現在何かがエラーを引き起こしています.
スクリプトについて:
ログ ファイルは、多数の圧縮された.tgzファイルに含まれています。私のスクリプトは、各.tgzファイルの各ログを検索します。
私のスクリプトが受け入れるコマンド ライン引数の 1 つは、PROCESS_IN_PARALLELと呼ばれるTrue/Falseパラメータです。PROCESS_IN_PARALLELがTrueに設定されている場合、各.tgzファイルは独自のスレッドで (マルチプロセッシング モジュールを使用して) 検索されます。PROCESS_IN_PARALLELがFalseに設定されている場合、各.tgzファイルが (ループを使用して) 順番に検索されます。
機能するもの:
- VM には、スクリプトのテストに使用するバッチ ファイルがあります。この.batを使用して、 PROCESS_IN_PARALLELを (1a) Trueまたは (1b) Falseに設定してスクリプトを呼び出すことができます。もちろん、Trueの場合ははるかに高速に実行されます(約 4 倍高速)。この.batが Hudson と同じパラメーターを同じ順序でスクリプトに渡す
ことを 4 重にチェックしました。また、入力パラメーターをファイルに記録する行をスクリプトに追加したところ、Hudson が実際に正しいパラメーターを正しい順序で渡していることがわかりました。 - Hudson を使用して、PROCESS_IN_PARALLELをFalseに設定してスクリプトを正常に呼び出すことができます。
- 上記の 3 つのテスト ケースを複数回 (他のパラメーターの複数の構成を使用した場合でも) 使用して、スクリプトの現在の反復をテストしましたが、すべて正常に実行されました。
何が機能しないか:
Hudson を使用してPROCESS_IN_PARALLELをTrueに設定してスクリプトを呼び出すと、奇妙なエラーが発生します。トレースバックは次のとおりです。
Traceback (most recent call last):
File "F:\Scripts\Parse_LogFiles_Archive\parseLogs_Archive_8-19-13.py", line 40, in main
searchHits = searchTarList(searchDir, newDirectory, argv)
File "F:\Scripts\Parse_LogFiles_Archive\parseLogs_Archive_8-19-13.py", line 163, in searchTarList
hits = processPool.map(searchTar, tarMap)
File "E:\Python27\lib\multiprocessing\pool.py", line 225, in map
return self.map_async(func, iterable, chunksize).get()
File "E:\Python27\lib\multiprocessing\pool.py", line 522, in get
raise self._value IOError: [Errno 9] Bad file descriptor
私の調査によると、このエラーは、書き込みモードで開かれたファイルを Python が読み込もうとしたときに発生します。
私の質問:
Python と Hudson の両方をよく知っていて、何が起こっているのかを知っている天才はいますか?