我有一个文本文件,其中包含要处理的作业列表。它可以一次处理所有这些,但它会使计算机资源超载并且一些作业失败。它也可以一次处理一行,但整个处理时间太长。
我的客户要求我们一次处理5个,看看我们是否可以加快处理时间而不会错过任务。我觉得这是可能的,而且很可能很容易,但是我的大脑被卡在上面,我无法弄明白。
每个作业都在文本文件的一行上。有没有办法加载要运行的作业列表,但是限制它一次运行5个?
答案 0 :(得分:1)
这应该以您正在寻找的方式执行。我没有测试过它。它只适用于BASH。
IFS=$'\n' read -d '' -r -a jobs < list_of_jobs.txt
total_number_of_jobs=$( wc -l list_of_jobs.txt | awk '{print $1}' )
i=0;
accumulated=0;
limit=5; #How many to process at the same time
while [ $i -lt $total_number_of_jobs ]
do
while [ $accumulated -lt $limit ] && [ $i -lt $total_number_oj_jobs ]
do
./${jobs[$i]} &
(( i ++ ))
(( accumulated ++ ))
done
wait
accumulated=0
done
请告诉我它是否对您有所帮助。此致!
答案 1 :(得分:1)
我建议 GNU Parallel 如下:
parallel -j 5 -a YourJobFile
有很多选项,请尝试添加—-eta
或—-progress