gpt4 book ai didi

linux - 如何执行具有并发和等待限制的多个命令?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:20 25 4
gpt4 key购买 nike

我想实现的是这样的:

#!/bin/sh
concurrency_limit 3

#takes 5 min
(/usr/bin/my-process-1 --args1 && /usr/bin/my-process-2 --args1) &
#takes 10 min
(/usr/bin/my-process-1 --args2 && /usr/bin/my-process-2 --args2) &
#takes 15 min
(/usr/bin/my-process-1 --args3 && /usr/bin/my-process-2 --args3) &
#takes 5 min
(/usr/bin/my-process-1 --args4 && /usr/bin/my-process-2 --args4) &
#takes 10 min
(/usr/bin/my-process-1 --args5 && /usr/bin/my-process-2 --args5) &
#takes 20 min
(/usr/bin/my-process-1 --args6 && /usr/bin/my-process-2 --args6) &

wait max_limit 1200
echo all processes complete

总体预期最长执行时间为 20 分钟(-+ 1 分钟),假设我有 3 个可用的 CPU 内核,并且我不希望同时运行超过 3 个进程。

在脚本的开头,前 3 个进程启动。

5 分钟后:第一个过程完成,第四个过程开始。

第 10 分钟:第 2 和第 4 个过程完成,第 5 个过程开始。

第 15 分钟:第 3 个过程完成。

第 20 分钟:第 5 个过程完成。第 6 个进程被终止,无需进一步等待。

我在 stackoverflow 上做了很多研究,但找不到类似的用例:

How to wait in bash for several subprocesses to finish and return exit code !=0 when any subprocess ends with code !=0?

https://www.codeword.xyz/2015/09/02/three-ways-to-script-processes-in-parallel/

http://www.gnu.org/software/parallel/

如有任何帮助或评论,我们将不胜感激。

最佳答案

除非我遗漏了什么,否则我认为 GNU Parallel 会很容易地为您做到这一点。

如果您创建一个名为 jobs 的文件,其中包含:

./my-process-1 --args1 && ./my-process-2 --args1
./my-process-1 --args2 && ./my-process-2 --args2
./my-process-1 --args3 && ./my-process-2 --args3
./my-process-1 --args4 && ./my-process-2 --args4
./my-process-1 --args5 && ./my-process-2 --args5
./my-process-1 --args6 && ./my-process-2 --args6

然后您可以使用 --dry-run 查看 GNU Parallel 将执行的操作,如下所示:

parallel --dry-run -j 3 -k -a jobs

输出

./my-process-1 --args1 && ./my-process-2 --args1
./my-process-1 --args2 && ./my-process-2 --args2
./my-process-1 --args3 && ./my-process-2 --args3
./my-process-1 --args4 && ./my-process-2 --args4
./my-process-1 --args5 && ./my-process-2 --args5
./my-process-1 --args6 && ./my-process-2 --args6

如果 my-process-1 需要 3 秒,my-process-2 需要 5 秒,则整个需要 16 秒,因为前 3 行是在parallel 并且每行需要 8 秒,然后接下来的 3 行并行执行并需要 8 秒。

关于linux - 如何执行具有并发和等待限制的多个命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40875199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com