GNU Parallel:如何确定您正在使用的作业 "slot"?
GNU Parallel: How do determine job "slot" you're using?
我正在尝试找到一种方法来确定作业 "slot" 或 "core" 当前正在 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
一次只能有一个命令使用每个资源。假设我像往常一样将这些命令放入 parallel
中,一次有 4 个作业,并且作业 3 完成并转到队列中的下一个,我现在有这些 运行ning 并行:
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
我考虑过使用文件系统或其他类型的资源正在使用的外部标志,但我认为对于并行进程,可能会出现竞争条件。
我已经看了一遍,非常感谢任何帮助!
我相信您正在寻找 {%}:
parallel -j4 command ressource{%} file{}.rb ::: {1..8}
我正在尝试找到一种方法来确定作业 "slot" 或 "core" 当前正在 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
一次只能有一个命令使用每个资源。假设我像往常一样将这些命令放入 parallel
中,一次有 4 个作业,并且作业 3 完成并转到队列中的下一个,我现在有这些 运行ning 并行:
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
我考虑过使用文件系统或其他类型的资源正在使用的外部标志,但我认为对于并行进程,可能会出现竞争条件。
我已经看了一遍,非常感谢任何帮助!
我相信您正在寻找 {%}:
parallel -j4 command ressource{%} file{}.rb ::: {1..8}