1

クラスター上のキューにジョブを送信していますが、ジョブが完了したかどうかを確認したいと思います。私のやり方は、現在実行中のすべてのジョブを一覧表示jobIDするコマンド(と呼ばれる)の出力にが存在するかどうかを確認することです。jobsシェルを介して呼び出しjobs、その出力を解析して、jobIDそこにあるかどうかを確認します。そうでない場合は、ジョブが終了したことを示すシグナルとして解釈されます。

   sleep = 2
   while True:
        output = subprocess.Popen("jobs %i" %(jobID),
                                  shell=True,
                                  stdout=subprocess.PIPE,
                                  stderr=subprocess.PIPE).communicate()
        if job_done(output):
           break
        time.sleep(sleep)

は2に設定されているためsleep、これは2秒ごとにチェックされますが、ジョブは数時間実行される可能性があります。OSError Cannot allocate memoryマシンに大量のメモリがあり、スレッドはの出力をチェックする以外はメモリを大量に消費することは何もしませんが、ランダムにを取得することがありjobsます。これを引き起こしている可能性がありますか?Popen、、を使用するよりも、これを行うためのより良い方法はありPIPEますcommunicateか?

この問題は、ここで報告されている問題(Python subprocess.Popen "OSError:[Errno 12]メモリを割り当てることができません")と似ているようですが、この問題の解決策はありませんでした。

4

1 に答える 1

0

どのpythonバージョンを使用していますか?2.6か2.7?またはさらに新しい?ファイル記述子のステータスは?fd-issueを参照してください。

あなたが言及したSO投稿の下部に、同じ問題に関する別の投稿があるようです。彼の提案も参照してください。

于 2012-11-08T22:45:46.303 に答える