首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为作业队列的并行gnu

作为作业队列的并行gnu
EN

Stack Overflow用户
提问于 2017-03-11 17:45:13
回答 1查看 957关注 0票数 1

我有一组作业,所有的作业都可以并行运行,所以我想并行化它们,以获得更好的吞吐量。

这就是我目前正在做的事情:我使用同时在一组作业中运行作业的多处理库编写了一个python脚本。在一组中的所有作业完成后,将调用另一组作业(脚本)。这是低效的,因为集合中的每个作业都有不同的执行时间。

最近,我注意到GNU并行,我认为它可能有助于改进我的脚本。然而,一组作业有一些预处理和后处理任务,因此不可能运行随机作业。

总之,我希望1)确保在启动作业之前完成预处理,2)在一组作业都完成后运行后处理。

这就是我想要做的:

  1. 为每一组作业运行单独的脚本。
  2. 在脚本中为每一组运行预处理,现在可以自由运行所有作业。
  3. 每个脚本都将作业注册到GNU并行作业队列中。
  4. GNU并行在队列中并行运行作业。
  5. 每个脚本监视他们自己的工作是否已经完成。
  6. 当一组中的所有工作完成后,运行后处理。

我想知道如何使用GNU并行,甚至不确定GNU并行是否是一种写工具。

EN

回答 1

Stack Overflow用户

发布于 2017-03-12 09:54:44

如果我们假设您受到CPU的限制(而不是mem或I/O),那么这可能有效:

代码语言:javascript
复制
do_jobset() {
  jobset=$1
  preprocess $jobset
  parallel --load 100% do_job ::: $jobset/*
  postprocess  $jobset
}
export -f do_jobset
parallel do_jobset ::: *.jobset

如果do_job从一开始就没有使用完整的CPU,但是加载要处理的数据需要10秒,那么在--load 100%之前添加--delay 10

另一种办法是:

代码语言:javascript
复制
parallel preprocess ::: *.jobset
parallel do_job ::: jobsets*/*
parallel postprocess ::: *.jobset
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42738513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档