GNU Parallel:如何防止并行处理特定作业

GNU Parallel: how to prevent specific jobs from being processed in parallel

给定

一组作业 运行 并行:{ app0, app1, app2, .... }

问题:

如何启动工具 'GNU parallel' 以并行 运行 所有作业,从而阻止某些特定作业并发 运行?

示例

如果appXappY依赖相同的资源,如何指定appX可以运行与app0并行,app1, ...但从来没有 appY?

示例 2:

appXappY 可以 运行 并行,但它们都不能 运行 同时与 appZ.

我不是 100% 清楚你想要什么。也许将 appX 和 appY 替换为:

sem --id myidXY --fg appX
sem --id myidXY --fg appY

可以这样做:

... | parallel eval '{= s/(app(X|Y))/sem --id appXY --fg / =}'

这应该确保只有一个 appXappY 是 运行;但是让很多 appZs 运行.

{= =} 被解释为 Perl 代码。

s/(app(X|Y))/sem --id appXY --fg /appXappY 替换为 sem --id appXY --fg,后跟 appXappY,具体取决于匹配的内容。如果没有匹配,则值不变。

(echo appX; echo appX; echo appX; 
 echo appY; echo appX; echo appV;
 echo appX; echo appZ) |
  parallel eval '{= s/(app(X|Y))/sem --id appXY / =}'

如果这不是你的意思,请编辑问题。