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