在 bash 中生成多个 python 脚本



我使用以下脚本在服务器中生成多个python脚本。每个脚本l给出的参数都不同,从 0 到 150 不等。

for i in `seq 0 9`;
do 
for j in `seq 0 14`;
do 
f=$((i*15))
l=$((j+f))
./script --l ${l} &
done
i=0
for job in `jobs -p`
do
pids[${i}]=${job}
i=$((i+1))
done
for pid in ${pids[*]}; do
wait ${pid}
done 
done

上面的语法生成 15 个 python 脚本,并等待每个子进程完成,然后再生成后续的 15 个。但是,python脚本对于某些l值花费的时间很少,而对于其他l值则需要大量时间。我的问题是,如果对于一组给定的 15 个l值,脚本对其中 14 个值花费的时间很少,而对于一个值l花费大量时间,那么上面的脚本会等待一个脚本完成,然后再生成下一个 15 个,这会导致服务器中的许多内核保持空闲状态。我想知道是否有办法修改上面的代码,以便在每次其中一个子进程完成时生成一个新的子进程(以便在任何给定时间运行 15 个子进程(。

谢谢

这应该可以解决问题:

for i in $(seq 150)
do
while [[ $(jobs | wc -l) -ge 15 ]]
do
wait -n $(jobs -p)
done
script --l "$i" &
done

这个想法是,如果有 15 个或更多作业,请等到其中至少一个完成,直到运行不超过 15 个;然后生成下一个。wait -n很有用,因为当上述任何进程退出时,它将停止等待。

相关内容

  • 没有找到相关文章

最新更新