以增量迭代列表

时间:2018-06-07 15:55:18

标签: linux bash shell wait pid

我正在研究用于调用Sqoop codegen和导入作业的shell脚本,我需要一种方法来遍历数据库中所有表的列表并并行运行作业,但只能批量运行,所以我不要使数据库或我的服务器过载。

例如,当指定为所有表运行时,我获取数据库中所有表的列表,并将它们的名称放入一个数组中,迭代它并为每个表创建一个后台作业。

main(){
    if [[ $table_name = "all" ]]; then
        for table in "${_tablesList_[@]}"; do
            if [[ $job = "codegen" ]]; then
                codegen $schema_name ${schema_name^^}.${table^^} $CODEGEN_HOME/${schema_name^^}/${table^^} $CODEGEN_HOME/${schema_name^^}/${table^^} &> $LOGS_HOME/${schema_name^^}/codegen/$table/$_timestamp_ &
            fi
        done
    fi
}

codegen() {
   schema_name=$1
   table_name=$2
   outdir=$3
   bindir=$4

   sqoop job --exec ${schema_name}_codegen -- --table $table_name --outdir $outdir --bindir $bindir &
   PID=$!
   wait PID
   ... some more logic to run after the sqoop job ...
}

问题是,从一小部分表中可以有任何地方,最多400个或更多。

我的想法是批量遍历列表,一次说10个,然后等待所有这些完成,然后执行下一个10,依此类推,直到所有表都已运行。

一次存储10个PID的最佳方法是什么,等待它们全部完成,然后在main()中继续循环接下来的10个表,依此类推?

我有一个想法是将我拥有的表数除以10,然后创建许多其他列表,并逐个迭代每个单独的列表。

0 个答案:

没有答案