python123作业怎么提交_使用python提交作业

我有一个脚本,用于使用qsub向集群提交多个作业。qsub通常以表单的形式接受作业提交qsub [qsub options] job

在我的工作中,job通常是bash(.sh)或python脚本(.py),它实际调用要在每个节点上运行的程序或代码。如果我想提交一个名为“test_job.sh”的工作,并且有最长的walltime,我会的qsub -l walltime=72:00:00 test_job.sh

这相当于以下python代码from subprocess import call

qsub_call = "qsub -l walltime=72:00:00 %s"

call(qsub_call % "test_job.sh", shell=True)

或者,如果你有一个bash脚本#!/bin/bash

filename="your_filename_here"

ifort -openmp ran_numbers.f90 $filename ompscmf.f90 -o scmf.o

然后通过qsub job.sh提交?

编辑:老实说,最佳的作业排队方案因集群而异。简化作业提交脚本的一个简单方法是找出每个节点上有多少CPU可用。一些较新的排队系统允许您提交多个单CPU作业,它们将尽可能少地在节点上一起提交这些作业;但是,一些较旧的集群不会这样做,因此提交多个单CPU作业是不可取的。

假设集群中的每个节点都有8个CPU。你可以像写剧本一样#!/bin/bash

#PBS -l nodes=1;ppn=8

for ((i=0; i<8; i++))

do

./myjob.sh filename_${i} &

done

wait

这样做的目的是一次在一个节点上提交8个作业(&表示在后台执行),并等待所有8个作业完成。对于每个节点有多个CPU的集群(例如,我使用的一个集群每个节点有48个CPU),这可能是最佳的。

或者,如果提交多个单核心作业是最佳的,而上面的提交代码不起作用,那么可以使用python生成bash脚本以传递给qsub。#!/usr/bin/env python

import os

from subprocess import call

bash_lines = ['#!/bin/bash\n', '#PBS -l nodes=1;ppn=1\n']

bash_name = 'myjob_%i.sh'

job_call = 'ifort -openmp ran_numbers.f90 %s ompscmf.f90 -o scmf.o &\n'

qsub_call = 'qsub myjob_%i.sh'

filenames = [os.path.join(root, f) for root, _, files in os.walk(directory)

for f in files if f.endswith('.txt')]

for i, filename in enumerate(filenames):

with open(bash_name%i, 'w') as bash_file:

bash_file.writelines(bash_lines + [job_call%filename, 'wait\n'])

call(qsub_call%i, shell=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值