我正在向集群上的队列提交作业,并想检查作业是否完成。我这样做的方法是查看列出当前正在运行的所有作业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)
由于sleep
设置为 2,这意味着每两秒检查一次,但作业可能会运行几个小时。我发现我有时会随机OSError
Cannot allocate memory
得到jobs
. 这可能是什么原因造成的?有没有比使用和更好的方法来做到Popen
这PIPE
一点communicate
?
此问题似乎与此处报告的问题相似(Python subprocess.Popen "OSError: [Errno 12] Cannot allocate memory")但没有解决此问题。