Bash 连续和并行循环/命令

MaJ*_*R21 3 scripting bash parallelism

我想使用我制作的 Python 工具运行一些模拟。问题是我必须使用不同的参数/参数和所有内容多次调用它。

现在,我正在for为任务使用多个循环,例如:

for simSeed in 1 2 3 4 5
do
    for launchPower in 17.76 20.01 21.510 23.76
    do
        python sim -a $simSeed -p $launchPower
    done
done
Run Code Online (Sandbox Code Playgroud)

为了使模拟同时运行,我&在调用模拟器的行的末尾附加了 a 。

python sim -a $simSeed -p $launchPower &
Run Code Online (Sandbox Code Playgroud)

使用这种方法,我可以运行多个这样的种子。但是,由于我的计算机内存有限,我想重新编写上面的脚本,以便它for并行启动内循环和for顺序启动外循环。

例如,对于simSeed = 1,我希望 5 个不同的进程以launchPower等于17.76 20.01 21.510 23.76. 只要这部分已经完成,我希望脚本去竞选simSeed = 2并再次利用5种不同的并行处理launchPower等于17.76 20.01 21.510 23.76

我怎样才能完成这个任务?

域名注册地址:

我希望外循环按顺序运行,内循环并行运行,这样当内循环的最后一个并行进程完成时,外循环移动到下一次迭代。

Adm*_*Bee 5

GNU parallel 有几个选项来限制并行启动作业时的资源使用。

两个嵌套循环的基本用法是

parallel python sim -a {1} -p {2} ::: 1 2 3 4 5 ::: 17.76 20.01 21.510 23.76
Run Code Online (Sandbox Code Playgroud)

如果您想同时启动最多 5 个作业,例如,您可以说

parallel -j5 python <etc.>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用该--memfree选项仅在有足够的可用内存时启动新作业,例如至少 256 MByte

parallel --memfree 256M python <etc.>
Run Code Online (Sandbox Code Playgroud)

请注意,如果内存低于规定的“保留”值的 50%,最后一个选项将终止最近启动的作业(但它将自动重新排队以追赶)。

  • @MaJoR21 听起来你真的很想研究 GNU [`screen`](https://www.gnu.org/software/screen/) 或 `tmux`。 (2认同)