作業中のツールがあり、パーサーを実行し、別の分析ログを出力するために必要です。現在、私はそれを持っているので、それはウェブインターフェースを通してです。
- ユーザーはフォームに移動し、解析用のファイル名を送信します(ファイルはすでにシステム上にあります)。
- フォームはPythonCGIスクリプトに情報を送信します
- Python CGIスクリプトが実行され、サブプロセスが生成されて解析が実行されます。
- パーサーは分析に適切な情報を見つけ、サブプロセスも生成します。
使ってます
import subprocess
...
subprocess.Popen(["./program.py", input])
私のコードでは、ドキュメントから、子プロセスが終了するのを待たずに、スクリプトを実行し続けると仮定しました。これをすべて開始する私のCGIスクリプトは次のことを行います。
subprocess.Popen(["./program.py", input])
// HTML generation code
// Javascript to refresh after 1 second to a different page
HTML生成コードは、リクエストを処理したステータスだけを出力し、JavaScriptがページをメインホームページに更新します。
問題
CGIページは、サブプロセスが終了するまでハングしますが、これは私が望んでいることではありません。Popenはサブプロセスが終了するのを待たないと思っていましたが、このツールを実行すると、完了するまで停止します。スクリプトを終了してサブプロセスをバックグラウンドで実行し、ユーザーがすべてが読み込み信号で停止していると思わずにWebページが適切に機能するようにします。
読んだところどこでも待たないと言っているので、ポペンがこれをする理由を見つけることができないようですが、そう思われます。
また、奇妙なことに、スクリプトが完了する前に、apacheログに「Requestbodyreadtimeout」と表示されます。それでは、Apacheは実際にスクリプトを停止していますか?
申し訳ありませんが、完全なコードは「機密」であるため表示できませんが、ロジックが理解されていることを願っています。