2013-02-08 80 views

回答

6

尝试GNU Parallel,这是很容易使用:

GNU平行的是使用一个或多个计算机上并行执行工作shell工具。作业可以是单个命令或小脚本,必须针对输入中的每一行运行。典型的输入是文件列表,主机列表,用户列表,URL列表或者表格列表。作业也可以是从管道读取的命令。然后,GNU并行可以分割输入并将其并行传输到命令中。

如果你今天使用xargs和tee,你会发现GNU parallel很容易使用,因为GNU parallel被写成和xargs具有相同的选项。如果你在shell中编写循环,你会发现GNU parallel可以替换大多数循环,并且通过并行运行多个作业使其运行得更快。

GNU并行可确保命令的输出与您在顺序运行命令时所获得的输出相同。这使得可以使用GNU parallel的输出作为其他程序的输入。

对于输入的每一行,GNU并行将执行命令,将该行作为参数。如果没有给出命令,则执行输入行。多条生产线将并行运行。通常可以使用GNU并行来代替xargs或cat |庆典。


你提到的是一个构建脚本。如果您正在使用命令行实用程序make可以并行使用构建make's -j<N> option

GNU化妆知道如何同时执行多个配方。通常,make会一次只执行一个配方,在执行下一个之前等待它完成。然而,'-j'或'--jobs'选项告诉make同时执行许多配方。

另外,有distcc可与make用于分发编译到多个主机:

export DISTCC_POTENTIAL_HOSTS='localhost red green blue' 
cd ~/work/myproject; 
make -j8 CC=distcc 
2

GNU平行是相当不错的。 @Maxim - 好建议+1。

对于其中一种情况,如果您无法安装新软件,请尝试使用此命令来执行需要多次运行的慢速命令,运行慢命令17次。更改内容以适合您的需求:

#!/bin/bash 
cnt=0 

while [ $cnt -le 17 ] # loop 17 times 
do 
    slow_command & 
    cnt=$(($cnt + 1)) 
    [ $(($cnt % 5)) -eq 0 ] && wait # 5 jobs at a time in parallel 
done 
wait  # you will have 2 jobs you di not wait for in the loop 17 % 5 == 2 
+0

如果您可以运行上面的BASH脚本,也可以运行GNU并行。请参阅“最小安装”下的内容:http://git.savannah.gnu.org/cgit/parallel.git/tree/README?id=edac400fdf6c997967c6ba9332eb493b8aaddba8 – 2013-02-08 15:02:50