parallel-processing - GNU 并行 : How do determine job "slot" you're using?

标签 parallel-processing gnu-parallel

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

我已经考虑过使用文件系统或其他类型的资源正在使用的外部标志,但我认为对于并行进程,这条路线可能会出现竞争条件。

我已经看过了,非常感谢任何帮助!

最佳答案

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

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/

相关文章:

c++ - OpenMP/__gnu_parallel 用于 unordered_map

c++ - 16 位 float MPI_Reduce?

将工作流 DAG 转换为并行资源分配的算法?

service - 使用 gnu-parallel 无限期地进行 fork 进程,捕获单个退出错误并重生

imagemagick - 使用并行和 Imagemagick 将图像转换为 gif

parallel-processing - ffmpeg 和 gnu 并行

python - Dask 延迟性能问题

c - OpenMP:如何指定任务执行的频率

java - Maven Parallel Build - 对一些模块进行排序

gzip - 并行 : how to pass options to commands