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

问题描述 投票:1回答:1

已知:

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

题:

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

例:

如果appXappY依赖相同的资源,怎么能指定appX可以与app0app1并行运行......但是从不与appY一起运行?

例2:

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

bash parallel-processing gnu-parallel
1个回答
2
投票

我不是100%清楚你想要什么。也许用以下代码替换appX和appY:

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

可以这样做:

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

这应该确保只运行一个appXappY;但是让大量的appZs运行。

{= =}被解释为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/ =}'

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

© www.soinside.com 2019 - 2024. All rights reserved.