GNU Parallel:如何确定您正在使用的作业“插槽”?

Kev*_*upp 4 parallel-processing gnu-parallel

我试图找到一种方法来确定命令当前正在使用的作业“插槽”或​​“核心” parallel。例如,我们都看到过类似的parallel命令分配方式图像:

在此处输入图片说明

如果我想知道某个过程在哪一列中,我怎么知道?

我的具体问题得到了说明:如果设置-j 4为一次只允许运行4个作业,我想动态地知道一个命令占用的插槽是1 2 3还是4。问题是我有一些不能并行运行的命令,但是如果我知道我正在运行哪个插槽,我很好。

再举个例子,说我有要并行化的这些命令:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource4 file4.rb
command resource1 file5.rb
command resource2 file6.rb
command resource3 file7.rb
command resource4 file8.rb
Run Code Online (Sandbox Code Playgroud)

一次只能使用一个命令来使用每个资源。假设我parallel像往常一样一次将这些命令放入4个作业中,并且作业3完成并转到队列中的下一个,我现在并行运行这些命令:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource1 file5.rb
Run Code Online (Sandbox Code Playgroud)

注意resource1正在被两个命令使用,不好。我需要一个环境变量或告诉下一个命令使用资源号4的东西,以便并行化的命令如下所示:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource4 file5.rb
Run Code Online (Sandbox Code Playgroud)

我曾考虑过使用文件系统或其他一些正在使用资源的外部标志,但我认为使用并行进程时,可能会出现竞争条件。

我到处都看过,非常感谢您的帮助!

Ole*_*nge 5

我相信您正在寻找{%}:

parallel -j4 command ressource{%} file{}.rb ::: {1..8}
Run Code Online (Sandbox Code Playgroud)