已知:
一组并行运行的工作:{app0
,app1
,app2
,....}
题:
如何启动“GNU parallel”工具以并行运行所有作业,从而阻止某些特定作业同时运行?
例:
如果appX
和appY
依赖相同的资源,怎么能指定appX
可以与app0
,app1
并行运行......但是从不与appY
一起运行?
例2:
appX
和appY
可以并行运行,但它们都不会与appZ
同时运行。
我不是100%清楚你想要什么。也许用以下代码替换appX和appY:
sem --id myidXY --fg appX
sem --id myidXY --fg appY
可以这样做:
... | parallel eval '{= s/(app(X|Y))/sem --id appXY --fg $1/ =}'
这应该确保只运行一个appX
或appY
;但是让大量的appZ
s运行。
{= =}
被解释为Perl代码。
s/(app(X|Y))/sem --id appXY --fg $1/
用appX
替换appY
或sem --id appXY --fg
,接着是appX
或appY
,取决于匹配的内容。如果没有匹配则该值不变。
(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/ =}'
如果这不是您的意思,请编辑问题。