在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
因此,我想分批运行Python脚本,每批10个,然后等待整个批处理完成,然后再继续执行下一批10个脚本,因此使用wait
命令。
但是,我发现当我运行这个bash脚本时,script_2.py在前20个输入值上运行,而不仅仅是前10个,作为后台进程。此外,在第一批20个脚本之后,脚本继续按预期执行,每批10个。是否有明显的原因发生这种情况,以及我如何防止它这样做?
干杯!
发布于 2015-12-30 19:59: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
...
https://stackoverflow.com/questions/34535332
复制