确定分配给作业的处理器数量

时间:2019-05-23 02:28:17

标签: python multithreading hpc

我正在尝试纠正一个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]

是否有更简洁直接的方法?

1 个答案:

答案 0 :(得分:0)

根据您使用的调度程序,您可以查询从调度程序请求的作业的核心数。 对于 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']))