Isa*_*aac 4 parallel-processing bash centos
我有一个包含以下循环的shell脚本.
i=0
upperlimit=$verylargevariable
do
complexstuff RunManager file $i
i= 'expr $i +1'
done
Run Code Online (Sandbox Code Playgroud)
这个脚本在四核机器上运行,据此top,在执行循环的一次迭代时,使用每个核心的大约15%.我想将它分布在四个核心上,以便循环的每次迭代执行complexstuff四次,每个核心一次,这样可以更有效地使用资源.我们谈论的是目前需要几个小时的计算,因此这里的效率不仅仅是良好的实践.(每次迭代的输出显然与前一次迭代无关.)
PS:主机是运行Cent-OS的服务器,如果有帮助的话.
Ole*_*nge 10
使用GNU Parallel,您可以:
seq $verylargevariable | parallel -j150% complexstuff RunManager file
Run Code Online (Sandbox Code Playgroud)
150%将在每个核心运行1.5个进程,因此如果它目前使用15%,这将在所有4个核心上给你大约100%.
要了解详情,请观看介绍视频:http://www.youtube.com/watch?v = OpaiGYxkSuQ
除了 Ole Tange 解决方案(看起来很棒)之外,如果您的计算具有非常相似的持续时间,您可以尝试这样的方法:
i=0
upperlimit=$verylargevariable
do
complexstuff RunManager file $i &
i= 'expr $i + 1'
complexstuff RunManager file $i &
i= 'expr $i + 1'
complexstuff RunManager file $i &
i= 'expr $i + 1'
complexstuff RunManager file $i &
i= 'expr $i + 1'
wait
done
Run Code Online (Sandbox Code Playgroud)
这样,在每次运行循环时,您将创建 4 个 bash 子进程来启动您的计算(并且由于系统很棒,它会将它们分派到不同的核心上)。如果 4 个进程还不足以烧毁所有 cpu,请增加每个循环上创建的进程数。