给予:
一组要并行运行的作业:{{app0
,app1
,app2
,....}
问题:
如何启动“ GNU并行”工具来并行运行所有作业,从而阻止某些特定作业同时运行?
示例:
如果appX
和appY
依赖于相同的资源,那么如何指定appX
可以与app0
,app1
等并行运行。 ,但从未使用appY
吗?
示例2 :
appX
和appY
可以并行运行,但是它们都不能与appZ
同时运行。
答案 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/ =}'
这应确保仅运行一个appX
或appY
;但要让大量appZ
运行。
{= =}
被解释为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/ =}'
如果这不是您的意思,请编辑问题。