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

时间:2015-02-04 18:22:40

标签: parallel-processing gnu-parallel

我试图找到一种方法来确定工作" slot"或"核心"命令当前正在parallel中使用。例如,我们都看到了parallel如何分配命令的类似图像:

enter image description here

如果我想知道某个流程属于哪个列,我该如何知道?

我说明的具体问题:如果将-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

一次只能使用一个命令。假设我像往常一样将这些命令放在parallel中,一次有4个作业,作业3结束,然后进入队列中的下一个,我现在并行运行:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource1 file5.rb

注意resource1正由两个命令使用,不好。我需要的是一个环境变量或者告诉下一个命令使用资源编号4的东西,以便并行命令看起来像这样:

command resource1 file1.rb
command resource2 file2.rb
command resource3 file3.rb
command resource4 file5.rb

我已经考虑过使用文件系统或其他一些使用哪种资源的外部标志,但我认为并行流程可能存在竞争条件。

我看了一遍,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

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

parallel -j4 command ressource{%} file{}.rb ::: {1..8}