服务器上并行提交任务

实用场景

1你的任务是相互独立的
2你本来使用的是for循环,你想提高时间想要把全部这些独立的文件,一起提交一起跑
3你的任务数量很多并且任务同时用一个脚本,只是不同任务的参数不一样呀,本质上你一个个提交也可以,但是显的很呆。

需要的文件

1. 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

这个代码可以快速的建立一个config文件

# 初始化空列表,用于存储数据
data = []

# 第一列是行号(从1开始)
for row in range(1, 11):  # 假设需要生成10行数据,你可以调整行数
    # 第二列是0到7的数字
    for second_column in range(0, 8):
        # 第三列是第二列基础上遍历16到31的数字
        for third_column in range(16, 32):
            data.append([row, second_column, third_column])

# 将结果写入到 output.txt 文件中
with open('output.txt', 'w') as file:
    for row in data:
        # 将每行数据以空格分隔并写入文件
        file.write(f"{row[0]} {row[1]} {row[2]}\n")

print("数据已成功写入 output.txt 文件!")

2. test.py (这些任务的共同脚本)

 a = [sys.argv[1],sys.argv[2],sys.argv[3]]

在你的脚本里面加入这行代码就可以从python脚本的外部导入参数了。

3. 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.txt

scan=$(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程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值