在 Ubuntu 14.04 上,我有一些需要在一系列输入上运行的 Python 脚本。其中一些可以并行运行,因此我从 bash 脚本将它们作为后台进程启动(如下)。
for m in `seq 3 7`;
do
python script_1.py $m
for a in `seq 1 10 201`;
do
for b in `seq 0 9`;
do
t=$(($a + $b))
python script_2.py $m $t &
done
wait
done
done
因此,我想以 10 个批处理运行 Python 脚本,然后等到整个批处理完成后再继续执行下一个 10 个批处理,因此需要 wait
命令。
但是,我发现当我运行此 bash 脚本时,script_2.py 作为后台进程在前 20 个输入值上运行,而不仅仅是前 10 个。此外,在第一批 20 个之后,脚本继续按需要以 10 个为一批执行。是否有明显的原因导致这种情况发生,以及如何防止它这样做?
干杯!
最佳答案
我没有发现您的代码有任何问题。我想到的唯一可能的解释是 script_2.py 的前 10 次执行几乎立即退出,因此您会觉得第一次有 20 个实例并行执行。我会在您的脚本中添加一些调试代码来检查这一点。像这样的东西:
...
for b in {0..9} ; do
t=$(($a + $b))
echo "now running script_2.py with t=${t}" >> mylog.txt
python script_2.py $m $t &
done
echo "now waiting..." >> mylog.txt
wait
...
关于bash - bash for 循环中的后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34535332/