我正在尝试找到一种方法来确定命令当前在 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 完成并进入队列中的下一个,我现在让这些并行运行: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}
关于parallel-processing - GNU 并行 : How do determine job "slot" you're using?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28328597/