DNN*_*NNX 5 command-line shell find sort parallelism
我有 1000 个要排序的 gzip 文件。
按顺序执行此操作,该过程看起来非常简单:
find . -name *.gz -exec zcat {} | sort > {}.txt \;
Run Code Online (Sandbox Code Playgroud)
不确定上面的代码是否有效(如果我在某处做错了,请纠正我),但我希望你理解这个想法。
无论如何,我想并行化 ungzip/sort 作业,以使整个过程更快。另外,我不想看到所有 1000 个进程同时运行。拥有一些具有可配置容量的有界作业队列(如 Java 中的 BlockingQueue 或 .NET 中的 BlockingCollection)会很棒。在这种情况下,只有 10 个进程会并行运行。
是否可以在 shell 中执行此操作?
快速访问谷歌揭示了这种有趣的方法:http://pebblesinthesand.wordpress.com/2008/05/22/a-srcipt-for-running-processes-in-parallel-in-bash/
for ARG in $*; do
command $ARG &
NPROC=$(($NPROC+1))
if [ "$NPROC" -ge 4 ]; then
wait
NPROC=0
fi
done
Run Code Online (Sandbox Code Playgroud)