LSF: 提交一个使用多处理模块的Python脚本还是一次提交多个“预分割”的脚本?
我有一个任务需要在Python中完成X次,我打算用LSF来加快这个过程。请问是提交一个包含多个可以并行运行的Python脚本的工作更好,还是提交一个使用多进程模块的Python脚本更好呢?
我有点不放心LSF能不能把Python代码分成多个进程(我不太清楚LSF是怎么做到的)。不过,我也不想让多个Python脚本到处乱飞,这样看起来效率低下又不太整齐。
这个任务是处理六个非常大的ASCII文件,并把结果保存在一个Python字典里以备后用。我想并行处理这六个文件(每个大约需要3分钟)。LSF能不能让Python告诉它:“嘿,这里有一个脚本,但你要把它分成这六个进程”?LSF需要Python来告诉它这一点吗,还是说它自己就知道怎么做?
如果你需要更多信息,请告诉我。我在“刚好够用”和“太多了”之间平衡得有点困难。
1 个回答
3
LSF可以简单理解为一个系统,它负责启动一个程序,并告诉这个程序分配给它多少个处理器核心(可能是在不同的主机上)。不过,LSF并不能阻止你的程序做一些愚蠢的事情,比如如果同时运行多个实例,其中一个实例覆盖了另一个实例的输出。
以下是一些常见的使用LSF的方法:
- 运行6个顺序的任务,每个任务处理一个文件。这6个任务可以同时运行。然后再有一个依赖于前6个任务的第七个任务,它会在前6个任务完成后运行,把它们的输出合并成一个结果。
- 在一台主机上运行一个并行任务,分配6个核心。这里可以使用Python的多进程模块。环境变量
$LSB_MCPU_HOSTS
会告诉你这个任务分配了多少个核心,这样你就知道该如何设置处理池的大小。 - 运行一个并行任务,分配6个核心,可以在多台主机上运行。同样,你的程序必须能够在这些其他主机上启动自己。(或者使用blaunch来帮助你)
我不确定这三种方法中哪一种最适合你的需求,但希望这个解释能帮助你做出决定。