使用Python向QSUB提交带有数值参数的作业

2024-05-17 13:00:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用SGE(QSUB)在集群的不同节点上运行一个python函数,比如my_fun(x1,x2)。我创建了一个脚本my_script.py,它接受来自命令行的数值参数,因此在本地运行时,我将其称为

python my_script.py x1 x2

现在我想将这个脚本以不同的x1和x2值的循环提交给集群。另外,为了使节点能够访问python和已安装的模块,我需要在节点上运行module load Python/2.7,然后再通过QSUB调用python脚本。在

这看起来是一个非常简单和典型的用例,但是我在Python中找不到任何直接的方法来实现这一点。在BASH和Python之间来回切换似乎有点笨拙。在


Tags: 函数命令行py脚本参数节点myscript
2条回答

我建议您根据节点的数量将作业划分为多个独立的作业。在

对于每个节点/核心,创建一个文件夹,其中包含该子任务应处理的参数列表。然后在python中,编写一个脚本来读取文件并调用您的脚本(可能使用多处理模块来支持多核)。在

编辑:

如果要通过qsub传递其他参数,可以使用可以传递到脚本的参数调用qsub:

qsub -F "myarg1 myarg2 myarg3=myarg3value" myscript.sh

您可以找到此文档here

这或多或少符合我的要求:

https://gist.github.com/timflutre/a9085660271bd059f71c

import sys
import subprocess

job_param1 = 12.5
job_param2 = 5.0
jobName = "python my_script.py %f %f" % (job_param1,job_param2)
cmd = "module load Python/2.7; sleep 0.2; %s" % jobName
echoArgs = ["echo", "-e", "'%s'" % cmd]
print(" ".join(echoArgs))
qsubArgs = ["qsub","-cwd"]
print(" ".join(qsubArgs))

wholeCmd = " ".join(echoArgs) + " | " + " ".join(qsubArgs)
out = subprocess.Popen(wholeCmd, shell=True, stdout=subprocess.PIPE)
out = out.communicate()[0]

jobId = out.split()[2]
print jobId

相关问题 更多 >