我正在尝试纠正一个python程序,该程序将使用工人库在Linux HPC计算环境上执行任务。我想设置池中的工人数量等于我为工作要求的线程数量。
命令,例如 multiprocessing.cup_count()
和 num_procs
返回64,即节点上的线程数,而不是分配给我的工作的线程数。
我当前的解决方案是在批处理文件中grep命令以指定线程数,然后检查输出:
os.system('grep -i "batch -n" * > output')
file_ = open('output','r')
file_lines = file_.readlines()
file_.close()
for line in file_lines:
elems = line.strip().split()
if '-n' in elems:
position = elems.index('-n')
num_procs = elems[position+1]
是否有更简洁,更直接的方法?
根据您使用的调度程序,您可以查询调度程序请求的工作数量。对于 sge -$NSLOTS
;对于 slurm - $SLURM_CPUS_PER_TASK
;对于 PBS -$PBS_NP
。
例如,SGE:
import os
#for SGE:
nslots = int(os.environ['NSLOTS']))
# for SLURM:
nslots = int(os.environ['SLURM_CPUS_PER_TASK']))