我试图找到一种方法来确定工作" slot"或"核心"命令当前正在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
我已经考虑过使用文件系统或其他一些使用哪种资源的外部标志,但我认为并行流程可能存在竞争条件。
我看了一遍,非常感谢任何帮助!
答案 0 :(得分:4)
我相信您正在寻找{%}:
parallel -j4 command ressource{%} file{}.rb ::: {1..8}