Linux bashmultithreading/处理小型作业

我有一个运行一些数据处理命令10K次的脚本。

foreach f (folderName/input*.txt) mycmd $f end 

我已经为每个“mycmd $ f”定时运行时间为0.25秒。 运行10K时,总计超过1小时。 我在16核心nehalem上运行它。 剩下的15个内核不运行是一个巨大的浪费。

我已经尝试了睡眠,不知怎的,脚本只是在3900次迭代中发生了警告或错误,如下所示。 睡眠越短,死亡越快。

 foreach f (folderName/input*.txt) mycmd $f & ; sleep 0.1 end 

有一个更好的方法。 注意:我更喜欢shell脚本解决scheme,让我们不要漫步到C / C ++的土地。

谢谢

问候

管理文件列表

 xargs -n 1 -P 16 mycmd 

例如:

 echo folderName/input*.txt | xargs -n 1 -P 16 mycmd 

有一些其他的解决方案可能使用下列应用程序之一:

xjobs

平行

PPSS – 并行处理Shell脚本

runpar.sh

batch提交作业; 应该解决负载平衡和资源匮乏问题。

 for f in folderName/input.*; do batch <<____HERE mycmd "$f" ____HERE done 

(不能100%确定引号是否正确和/或有用。)

使用GNU Parallel,您可以执行以下操作:

 parallel mycmd ::: folderName/input*.txt 

来自: http : //git.savannah.gnu.org/cgit/parallel.git/tree/README

=完整安装=

GNU Parallel的完全安装非常简单:

 ./configure && make && make install 

如果您不是root用户,可以将〜/ bin添加到您的路径并安装到〜/ bin和〜/ share:

 ./configure --prefix=$HOME && make && make install 

或者如果你的系统缺少“make”,你可以简单地将src / parallel src / sem src / niceload src / sql复制到路径中的目录中。

=最小安装=

如果你只需要并行,并没有安装“make”(也许系统是旧的或Microsoft Windows):

 wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel chmod 755 parallel cp parallel sem mv parallel sem dir-in-your-$PATH/bin/ 

观看介绍视频快速介绍: https : //www.youtube.com/playlist?list=PL284C9FF2488BC6D1