我有一个运行一些数据处理命令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