从GNU Parallel调用GNU Parallel

5
什么是嵌套调用GNU parallel的正确方法?
愚蠢的例子:
seq 1 100 | parallel echo {} | parallel seq {} 1000

我的理解是,在一个8-CPU的机器上,每个并行进程会启动8个作业,总共64个作业。如果你调用的不止是seq这样的小程序,这可能会过载机器。有没有一种方法可以限制作业数量但仍然充分利用并行性呢?


以上内容将启动16个作业:8个echo作业和8个seq作业。您可能想要的是:seq 1 100 | parallel "echo {} | parallel -I // seq // 1000",这将在8核心机器上启动64个seqs。 - Ole Tange
1个回答

1

使用-j参数来限制外部或内部并行:

seq 1 100 | parallel -j1 "echo {} | parallel -I // seq // 1000"

通常情况下,您可以使用多个::::或:::来表示嵌套命令,如下所示:
parallel seq {1} {3} {2} :::: <(seq 10) <(seq 20 30) ::: 1 2 3

这样做更好,因为您将始终保持8个作业运行,而上述方法在某些时期会在8核机器上运行少于8个作业。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接