该脚本detect.py
执行一些分析:
#!/usr/bin/python
[...]
for i in range(X, Y):
[...]
这个想法是在一些文件夹中运行这个 python 脚本。这个变量会根据我们所在的文件夹X
而变化。Y
此执行由以下prepare.sh
脚本控制:
#!/usr/bin/bash
# Each folder has this name:
# 0.001-0.501
# 0.002-0.502
# 0.003-0.503
# ... and so on, up to:
# 8.500-9.000
# So we create the folders array:
lower_limit_f=($(seq 0.001 0.001 8.5))
upper_limit_f=($(seq 0.501 0.001 9))
FOLDERS=( )
for i in ${!lower_limit_f[*]} ; do
FOLDERS+=("${lower_limit_f[$i]}-${upper_limit_f[$i]}")
done
# Now we create two more arrays:
# lower_limit, which contains all possible values of `X`
# and upper_limit, which contains all possible values of `Y`
lower_limit=($(seq 1 1 8500))
upper_limit=($(seq 501 1 9000))
# Now I loop over all `FOLDERS`:
for i in ${!FOLDERS[*]} ; do
# I copy the python script to each folder
cp detect.py ./${FOLDERS[$i]}
cd ./${FOLDERS[$i]}
# I make the substitution of `X` and `Y`, accordingly:
sed -i "s/0, len(traj)/${lower_limit[$i]} , ${upper_limit[$i]}/g" detect.py
# we execute:
python detect.py
cd -
done
这样做的问题是有 8500 个文件夹,并且这是按顺序执行的。
我想通过以下方式将这些工作提交到 slurm 中:
- 1个节点(40核)的分配
- 40 个
detect.py
单独处理 40 个文件夹。 - 如果
detect.py
在给定文件夹中完成,它会留下 1 个核心可供下一个文件夹使用。
这将是以下run.sh
要提交到 slurm 队列的 sbatch 脚本sbatch run.sh
:
#!/bin/sh
#SBATCH --job-name=detect
#SBATCH -N 1
#SBATCH --partition=xeon40
#SBATCH -n 40
#SBATCH --time=10:00:00
...
这怎么能在这个run.sh
脚本中发送?