python作业控制

2024-05-03 05:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python进行作业控制。使用bash时,bash脚本如下所示:

i=0

for mu_Li in `seq -17 0.1 -14`  
do mkdir mu_$mu_Li
cp mc.x POSCAR BCLUST CLUST CSPECS  configuration  factor_group FBCLUST FCLUST point_group  PRIM mc_input configuration.corr  eci.in reference relax.log SCEL eci.out mu_$mu_Li
#cp ../POSCAR mu_$mu_Li\_$mu_Ni/POSCAR
 cd mu_$mu_Li
 sed -i "s/^\(Na \)[0-9-][.0-9-]*\(.*mu init\)/\1${mu_Li}\2/" mc_input

 sed -i "s/^\(Na \)[0-9-][.0-9-]*\(.*mu min\)/\1${mu_Li}\2/" mc_input

 sed -i "s/^\(Na \)[0-9-][.0-9-]*\(.*mu max\)/\1${mu_Li}\2/" mc_input

 ./mc.x 2>&1 > /dev/null  &
 cd ..

i=$((i+1))
if (( $i % 16 == 0 ))   
then 
wait
rm mu_*/MCLUST[0-9] mu_*/configuration*  mu_*/FBCLUST  mu_*/*CLUST mu_*/mc.x
fi
done
wait

关键是我想使用所有可用的核心来运行多个./mc.x 2>&1 > /dev/null &,并在后台使用wait。 我是否应该在python中将所有内容都变成一个字符串:

^{pr2}$

Tags: inbashinputgrouplimccpconfiguration
1条回答
网友
1楼 · 发布于 2024-05-03 05:04:15

下面是如何使用subprocess生成多个后台进程,然后等待它们。在本例中,每个进程只是休眠。在

import subprocess
p1 = subprocess.Popen(['sleep', '1'])
p2 = subprocess.Popen(['sleep', '2'])

# Wait for all processes to complete and get list of return codes
rcs = [p.wait() for p in (p1, p2)]

有关详细信息,请参阅documentation。在

相关问题 更多 >