9

マルチプロセッシングとサブプロセスを使用して、さまざまな引数と並行して複数の外部コマンドを起動するPythonスクリプトがあります。コードはここにあります。

便宜上、このスクリプトをGNUScreenセッション内で起動します。このスクリプトが実行されているマシンには、プロセスがアクティブになるまでアイドル状態の12個のプロセッサがあります。

各プロセスの実行には数時間から数日かかるため、マシンから切断して画面セッションを切り離すことがよくあります。

しかし、最近、今まで経験したことのない行動に気づきました。何度かマシンに戻って、負荷がゼロのアイドル状態になっていることを確認しました。経由でアクティブなプロセスのリストを取得した場合、ps uxまたはプロセスのリストでtopスクリプト(およびサブプロセス)を見つけることができます。次に、画面セッションを再接続してプログラムの状態を確認すると、すぐに新しいプロセスのバッチがキューに送信され、システムの負荷が数秒で12に戻ります。スクリーンセッションを再接続する以外は、スクリプトに対してまったく何もしなかったことに注意してください。

システムに監視ツールをインストールしましたが、特定の時間が経過すると一部のプロセスが終了し、新しいプロセスが起動されなくなります。したがって、システムはサブプロセスがビジーになるまでアクティブになり、キューから解放されるジョブがなくなるとすぐにアイドル状態になります。

だから私の質問は、誰かがこの振る舞いを説明する理由を知っていますか?

編集:1年かそこら後、この問題は、画面上のパッチまたはPython自体のいずれかで再現できなくなります。それがテストのための良い方向性を提供したので、私は答えを受け入れています。

4

1 に答える 1

4

私はあなたが見ているものの理由を説明することはできません。しかし、私はあなたが次に何を試すことができるかについての考えを持っています。

  1. スクリプトの出力を次の場所にパイプしてみてください。tee out.txtそれでも効果がない場合は、試してください...
  2. 別の[ホップ]ホストで画面を実行します。そこからワーカーホストにSSHで接続します。エミュレートされていないシェルでスクリプトを実行します。次に、ホップから切断して再接続し、プロセスを確認してください。これは、画面がとにかく関与していることをワーカーから隠す必要があります。

これらのテストの結果をコメントしてください。それは私にもっと先に進むことを与えるでしょう。

于 2011-05-08T02:28:05.217 に答える