我有一组作业,所有的作业都可以并行运行,所以我想并行化它们,以获得更好的吞吐量。
这就是我目前正在做的事情:我使用同时在一组作业中运行作业的多处理库编写了一个python脚本。在一组中的所有作业完成后,将调用另一组作业(脚本)。这是低效的,因为集合中的每个作业都有不同的执行时间。
最近,我注意到GNU并行,我认为它可能有助于改进我的脚本。然而,一组作业有一些预处理和后处理任务,因此不可能运行随机作业。
总之,我希望1)确保在启动作业之前完成预处理,2)在一组作业都完成后运行后处理。
这就是我想要做的:
我想知道如何使用GNU并行,甚至不确定GNU并行是否是一种写工具。
发布于 2017-03-12 09:54:44
如果我们假设您受到CPU的限制(而不是mem或I/O),那么这可能有效:
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。
另一种办法是:
parallel preprocess ::: *.jobset
parallel do_job ::: jobsets*/*
parallel postprocess ::: *.jobsethttps://stackoverflow.com/questions/42738513
复制相似问题