如何在bash中并行化while循环?

时间:2017-10-06 09:21:23

标签: bash parallel-processing

我有以下并行运行的while循环。 (logProcess是我在我的脚本中先前定义的函数。)

while read LINE; do
    logProcess $LINE &
done <<< "$ELS_LOGS"
wait

我需要找到一种方法来限制运行的进程数。我知道有并行进程在运行。如何将循环转换为使用该命令?

2 个答案:

答案 0 :(得分:2)

我可以向您推荐 GNU Parallel 。您的整个脚本将成为:

parallel -a "$ELS_LOGS" logProcess

如果logProcess是您脚本中定义的函数,则需要在运行 GNU Parallel 之前先将其导出,如下所示:

export -f logProcess

然后,如果你想要,例如,一次运行8,你只需:

parallel -j 8 -a "$ELS_LOGS" logProcess

如果你想看看它会做什么,而不是真正做任何事情:

parallel --dry-run ...

如果您需要进度条或ETA:

parallel --eta ...
parallel --bar ...

答案 1 :(得分:1)

GNU xargs -P 20 -d $'\n' -n 1 logProcess 也是这项工作的适当工具:

logProcess

...将运行多达20个并发xargs个实例,并将给予{{1}}的stdin的每一行传递给另一个此类实例。