クラスター上のキューにジョブを送信していますが、ジョブが完了したかどうかを確認したいと思います。私のやり方は、現在実行中のすべてのジョブを一覧表示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]メモリを割り当てることができません")と似ているようですが、この問題の解決策はありませんでした。