マルチプロセッシングとサブプロセスを使用して、さまざまな引数と並行して複数の外部コマンドを起動するPythonスクリプトがあります。コードはここにあります。
便宜上、このスクリプトをGNUScreenセッション内で起動します。このスクリプトが実行されているマシンには、プロセスがアクティブになるまでアイドル状態の12個のプロセッサがあります。
各プロセスの実行には数時間から数日かかるため、マシンから切断して画面セッションを切り離すことがよくあります。
しかし、最近、今まで経験したことのない行動に気づきました。何度かマシンに戻って、負荷がゼロのアイドル状態になっていることを確認しました。経由でアクティブなプロセスのリストを取得した場合、ps ux
またはプロセスのリストでtop
スクリプト(およびサブプロセス)を見つけることができます。次に、画面セッションを再接続してプログラムの状態を確認すると、すぐに新しいプロセスのバッチがキューに送信され、システムの負荷が数秒で12に戻ります。スクリーンセッションを再接続する以外は、スクリプトに対してまったく何もしなかったことに注意してください。
システムに監視ツールをインストールしましたが、特定の時間が経過すると一部のプロセスが終了し、新しいプロセスが起動されなくなります。したがって、システムはサブプロセスがビジーになるまでアクティブになり、キューから解放されるジョブがなくなるとすぐにアイドル状態になります。
だから私の質問は、誰かがこの振る舞いを説明する理由を知っていますか?
編集:1年かそこら後、この問題は、画面上のパッチまたはPython自体のいずれかで再現できなくなります。それがテストのための良い方向性を提供したので、私は答えを受け入れています。