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

时间:2019-04-30 10:35:36

标签: bash parallel-processing gnu-parallel

给予

一组要并行运行的作业:{{app0app1app2,....}

问题

如何启动“ GNU并行”工具来并行运行所有作业,从而阻止某些特定作业同时运行?

示例

如果appXappY依赖于相同的资源,那么如何指定appX可以与app0app1等并行运行。 ,但从未使用appY吗?

示例2

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

1 个答案:

答案 0 :(得分:2)

我不清楚您想要什么。也许将appX和appY替换为:

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

可以这样做:

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

这应确保仅运行一个appXappY;但要让大量appZ运行。

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

s/(app(X|Y))/sem --id appXY --fg $1/appX替换appYsem --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 $1/ =}'

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