实用场景
1你的任务是相互独立的
2你本来使用的是for循环,你想提高时间想要把全部这些独立的文件,一起提交一起跑
3你的任务数量很多并且任务同时用一个脚本,只是不同任务的参数不一样呀,本质上你一个个提交也可以,但是显的很呆。
需要的文件
- config.txt (参数文件)
1 40 1 1457
2 40 1457 2913
3 40 2913 4369
4 40 4369 5825
5 40 5825 7281
6 40 7281 8737
7 40 8737 10193
8 40 10193 11649
参数文件就是传入你python文件的参数。上面的第一个数字是任务的编号,分别是任务1,2,3。每个任务编号传入3个参数,例如1号任务传入参数是40,1,1457
- test.py (这些任务的共同脚本)
a = [sys.argv[1],sys.argv[2],sys.argv[3]]
在你的脚本里面加入这行代码就可以从python脚本的外部导入参数了。
- bash.sh (bash脚本)
#!/bin/bash
#SBATCH --job-name=p1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
##指定每个任务占用几个核
#SBATCH --array=1-5
## 设定你的全部的任务数
#SBATCH --output=out/array_%A-%a.out
##可以把out文件都统一放好
#SBATCH --nodelist=c003
##指定服务器的节点c003,或者你也可以不指定,这样的话,你就可以同时使用多个核去运行任务config=config.txtscan=$(awk -v ArrayTaskID=$SLURM_ARRAY_TASK_ID '$1==ArrayTaskID {print $2}' $config)
chan1=$(awk -v ArrayTaskID=$SLURM_ARRAY_TASK_ID '$1==ArrayTaskID {print $3}' $config)
chan2=$(awk -v ArrayTaskID=$SLURM_ARRAY_TASK_ID '$1==ArrayTaskID {print $4}' $config)
#分别读取config.txt文件中每一行的第2,3,4的参数srun each_scan_pocal.py ${scan} ${chan1} ${chan2}
#运行你的python程序