我有一个将csvs转换为二进制格式的Julia脚本。相信我,它很棒。我也有许多(看似无数)我想要处理的csv。它是一个共享网络,因此我只能在一个剪辑中处理五个文件,而不会给CPU造成负担,并使我的同事愤怒并且可能不稳定。因此,我希望以五个为一组运行脚本,等待它们完成,然后运行下一批作为后台进程,直到它的米勒时间全部使用Julia的精彩run()函数ala:
julia csvparse3.jl /home/file1.csv > /dev/null 2>&1 &
如果我将解析脚本变成Julia模块/函数,我相当肯定我可以通过使用addprocs()和pmap()来回避所有这些。但是,我之所以这么说是因为我不知道如果我的原始脚本是用Fortran编写的,那么我会做什么呢?有没有办法让我为任意数量的外部程序实现上述目标,确定进程何时完成,并在简单循环的上下文中重新开始?非常感谢。
答案 0 :(得分:3)
使用GNU Parallel,您可以运行:
parallel -j5 julia csvparse3.jl ::: /home/*.csv > /dev/null 2>&1
GNU Parallel是一个通用的并行程序,可以很容易地在同一台机器上或在你有ssh访问权限的多台机器上并行运行作业。
如果要在4个CPU上运行32个不同的作业,并行化的直接方法是在每个CPU上运行8个作业:
GNU Parallel会在完成后生成一个新进程 - 保持CPU处于活动状态,从而节省时间:
<强>安装强>
如果没有为您的发行版打包GNU Parallel,您可以进行个人安装,不需要root访问权限。这可以在10秒内完成:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
有关其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README
了解详情
查看更多示例:http://www.gnu.org/software/parallel/man.html
观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
完成教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel