首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python等Slurm作业?

Python等Slurm作业?
EN

Stack Overflow用户
提问于 2018-08-14 09:32:28
回答 2查看 3.3K关注 0票数 10

我有一个python脚本,它应该为要调用的外部程序生成大量输入。对外部程序的调用将通过slurm进行。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-14 09:40:22

解决方案1

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

解决方案2

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

代码语言:javascript
复制
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并行在节点上分发作业。

票数 5
EN

Stack Overflow用户

发布于 2018-10-25 21:21:37

您可以像前面尝试的那样,在子进程中异步运行S批处理命令,但是对于S批处理可以使用-W或-wait命令行选项。这将导致子进程在作业结束之前不返回。然后,您可以阻止主程序的执行,直到所有子进程完成为止。作为奖励,这也将允许您处理来自外部程序的意外返回值。有关更多信息,请参见批处理文件

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51838249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档