限制嵌套或并发 GNU 并行调用中的作业总数

Limit total number of jobs within nested or concurrent GNU Parallel invocations

这是 this question and this question 在嵌套 GNU Parallel 上的延续。最终我想要实现的是让我的 Makefile 保持不变,除非更改 SHELL= 变量并使用 parallel 在我所有的机器上分配作业。

有没有办法确保 GNU Parallel 的并发执行遵守外部调用中指定的 --jobs 子句?或者通过其他方式来限制并行调用中的作业总数?例如:我希望下面输出中的内槽始终为 1,即输出第三行的 slot 1-2 违反了条件。

~• inner_par="parallel -I // --slotreplace '/%/' --seqreplace '/#/'"
~• cmd='echo id {#}-/#/, slot {%}-/%/, arg {}-//'
~• seq 2 | parallel -j 1 "seq {} | $inner_par $cmd"
id 1-1, slot 1-1, arg 1-1
id 2-1, slot 1-1, arg 2-1
id 2-2, slot 1-2, arg 2-2
~• 

您在寻找 sem 吗?

parallel -j 10 parallel -j 20 sem -j 30 --id myid mycmd

这将开始 200 sem 秒,但只有 运行 30 mycmd 并行。