1

我正在向集群上的队列提交作业,并想检查作业是否完成。我这样做的方法是查看列出当前正在运行的所有作业jobID的命令(称为)的输出中是否存在。jobsjobs通过外壳调用,解析它的输出,看看是否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. 这可能是什么原因造成的?有没有比使用和更好的方法来做到PopenPIPE一点communicate

此问题似乎与此处报告的问题相似(Python subprocess.Popen "OSError: [Errno 12] Cannot allocate memory")但没有解决此问题。

4

1 回答 1

0

你用的是哪个python版本?2.6 还是 2.7?甚至更新?您的文件描述符的状态是什么?请参阅fd 问题

在您提到的 SO 帖子的底部,似乎还有另一个关于同一问题的帖子。另见他的提议

于 2012-11-08T22:45:46.303 回答