【发布时间】:2019-09-23 00:29:54
【问题描述】:
我有一个用于科学计算的 linux 服务器。
服务器提供bsub < [filename] 用于将[文件名]提交到队列,计算将在2小时后返回“A.chk”之类的文件;
还有bjobs 用于检查所有作业的状态,包括jobID、运行状态(RUN、PEND、EXIT)等。
现在我想满足以下需求:
- 向服务器提交 A.sh;
- 等待计算结束,假设生成B.chk;
- 使用 B.chk 和现有脚本 C.py 进行另一次计算
- 在一个 .py 脚本中自动完成所有这些工作。
我已经设法在 python 脚本中获取了最新的 jobID 和运行状态。 我尝试了以下解决方案:
import os
import time
os.system("bsub < %s" %(A.sh))
job_ID = get_jobID()
while(get_runstatus(jobID) != "RUN" and get_runstatus(jobID) != "PEND"):
time.sleep(30)
if "B.chk" in os.listdir():
os.system("python C.py")
但是服务器中的while循环占用了太多的公共资源,所以我不太愿意这样做。然后我在SubProcess中搜索了process.join()之类的解决方案,但是服务器上的作业序列不能被视为python中的子进程。所以我在这里问你更好的解决方案。谢谢。
【问题讨论】: