Я отправляю код, используя qsub из python3, поскольку ( здесь - полный код):
scfc = ["qsub", "-Wblock=true", "script.sh"]
optstate = ["opt1", "opt2", "opt3"]
for sstate in optstate:
subprocess.call(scfc)
sdir = optstate.index(sstate)
print(sstate)
genincar2(sdir)
shutil.copy2("INCAR", "INCAR"+"."+str(sstate))
shutil.copy2("CONTAR", "CONTCAR"+"."+str(sstate))
, а script.sh:
#!/bin/bash
#PBS -S /bin/bash
#PBS -N Test
#PBS -l select=2:ncpus=24:mpiprocs=24
#PBS -q workq
#PBS -joe
#PBS -V
export I_MPI_FABRICS=shm:tmi
export I_MPI_PROVIDER=psm2
export I_MPI_FALLBACK=0
export KMP_AFFINITY=verbose,scatter
module load intel/2018
module load vasp/5.4.4
cd $PBS_O_WORKDIR
cat $PBS_NODEFILE > pbs_nodes
echo Working directory is $PBS_O_WORKDIR
NPROCS=`wc -l < $PBS_NODEFILE`
NNODES=`uniq $PBS_NODEFILE | wc -l`
mpirun -np $NPROCS --machinefile $PBS_NODEFILE vasp_std
Я ожидаю с -Wblock=true
(а также subprocess.call
) код, ожидающий завершения кода vasp_std, прежде чем перейти к строке sdir = optstate.index(sstate)
.
Но это не так, и получениеошибка, поскольку CONTCAR
еще не сгенерирован.
Если я напрямую отправляю qsub
из командной строки, то блокировка работает.
Из python я попытался check_call
также без изменений в состоянии.
Может ли кто-нибудь любезно помочь?
Система, которую я использую, имеет:
pbsnodes --version
pbs_version = 18.1.3
python3 --version
Python 3.4.9
uname -a
Linux master1.clusternet 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux