【问题标题】:GNU Parallel: How do determine job "slot" you're using?GNU Parallel:如何确定您正在使用的作业“槽”?
【发布时间】:2015-02-05 04:23:43
【问题描述】:

我正在尝试找到一种方法来确定命令当前在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-processing gnu-parallel


    【解决方案1】:

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

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

    【讨论】:

    • 哇,看起来就是这样!!不敢相信我错过了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2016-09-15
    • 2019-03-27
    • 2018-02-16
    • 2022-12-07
    • 2015-11-12
    相关资源
    最近更新 更多