GNU Parallel:如何防止并行处理特定作业
GNU Parallel: how to prevent specific jobs from being processed in parallel
给定:
一组作业 运行 并行:{ 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 / =}'
这应该确保只有一个 appX
或 appY
是 运行;但是让很多 appZ
s 运行.
{= =}
被解释为 Perl 代码。
s/(app(X|Y))/sem --id appXY --fg /
将 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 / =}'
如果这不是你的意思,请编辑问题。
给定:
一组作业 运行 并行:{ 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 / =}'
这应该确保只有一个 appX
或 appY
是 运行;但是让很多 appZ
s 运行.
{= =}
被解释为 Perl 代码。
s/(app(X|Y))/sem --id appXY --fg /
将 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 / =}'
如果这不是你的意思,请编辑问题。