【问题标题】:Background processes in bash for loopbash for 循环中的后台进程
【发布时间】:2015-12-30 18:46:03
【问题描述】:

在 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 个。是否有明显的原因导致这种情况发生,我该如何防止它发生?

干杯!

【问题讨论】:

  • 在 OSX 上运行良好。你真的在你的shebang中使用bash吗?

标签: bash for-loop ubuntu-14.04 background-process


【解决方案1】:

我在您的代码中没有发现任何错误。我想到的唯一可能的解释是您的 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
...

【讨论】:

    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2013-05-14
    • 2016-02-26
    相关资源
    最近更新 更多