【发布时间】:2019-04-30 10:35:35
【问题描述】:
给定:
一组要并行运行的作业:{ app0, app1, app2, .... }
问题:
如何启动“GNU 并行”工具以并行运行所有作业,从而阻止某些特定作业同时运行?
示例:
如果appX 和appY 依赖于相同的资源,如何指定appX 可以与app0、app1 并行运行,...但不能与appY 并行运行?
示例 2:
appX 和appY 可以并行运行,但它们都不能与appZ 并行运行。
【问题讨论】:
-
如果规则不是太复杂,把
appX和appY从列表中去掉,换成appZ = { appX ; appY; } -
不是 GNU 并行的解决方案,但有点相关且读起来很有趣:Bash complex pipeline dependencies
-
如果 Mark Setchell 的解决方案不是一个选项,因为您想要允许
appX; ...; appY和appY; ...; appX的非确定性行为,那么您可以在appX和appY中使用锁定机制,请参阅ensure only one instance of a shell script is running at a time. -
@MarkSetchell:我喜欢你的解决方案的优雅。您能否将此作为答案,以便我将其标记为回复?但是,您的解决方案在时间排序方面似乎有点干扰。 GNU 并行无法选择运行
appX等待一段时间然后运行 appY。 -
让我们等到 GNU Parallel 的作者 Ole Tange 登录。他总是有很好的想法将
parallel应用于问题。
标签: bash parallel-processing gnu-parallel