首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash for循环中的后台进程

bash for循环中的后台进程
EN

Stack Overflow用户
提问于 2015-12-31 02:46:03
回答 1查看 2.9K关注 0票数 2

在Ubuntu 14.04上,我有一些Python脚本需要在一系列输入上运行。其中一些可以并行运行,因此我将它们作为后台进程从bash脚本启动(如下所示)。

代码语言:javascript
运行
复制
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个。是否有明显的原因发生这种情况,以及我如何防止它这样做?

干杯!

EN

回答 1

Stack Overflow用户

发布于 2015-12-31 03:59:10

我看不出你的代码有什么问题。我想到的唯一可能的解释是,script_2.py的前10个执行几乎是立即退出的,所以您会有这样的印象,即第一次执行时并行执行了20个实例。我会在你的脚本中添加一些调试代码来检查这一点。类似于:

代码语言:javascript
运行
复制
...
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
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34535332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档