Python等Slurm工作?

我有一个python脚本,应该为要调用的外部程序生成一堆输入.对外部计划的呼吁将是通过slurm.

我想要的是让我的脚本等到所有生成的外部程序调用完成后(不是slurm命令,实际执行外部程序),然后解析外部程序生成的输出,做一些事情数据.

我尝试了子进程调用,但它只等待slurm submission命令.有什么建议吗?

解决方法:

解决方案1

我建议以较小的步骤打破您的管道,然后可以在bash脚本等中自动化.
首先,生成需要通过slurm运行的所有命令.如果您将它们作为slurm作业数组提交(参见例如here),则可以同时提交解析所有这些命令输出的脚本.使用slurm依赖项,只有在作业数组完成后才能启动此作业.

解决方案2

您可以在python脚本中执行while循环并检查作业的状态:

import time
t = time.time()
while True:
    # Break if this takes more than some_limit
    if time.time() - t > some_limit:
        break
    # Check if the jobs are done. This could be done by
    # grep'ing squeue for your username and some tags
    # that you name your jobs
    check_for_completion()
    # Sleep for a while depending on the estimated completion time of the jobs
    time.sleep(some_time)

解决方案3

在slurm上保留N个节点并在那里运行你的脚本.这避免了前端的混乱.我建议gnu parallel在节点上分配你的工作.

上一篇:ubuntu 18.04 安装 pyslurm 提示路径或版本出错的解决方法


下一篇:在SLURM中使用sbatch命令时如何导入本地python模块