LSF:提交一个使用多处理器模块的Python脚本*或*一次提交几个脚本" pre-split"?

时间:2014-05-27 19:16:40

标签: python multiprocessing lsf

我有一个任务要在Python中完成X次,我将使用LSF来加快速度。提交包含多个Python脚本的作业是否更好?这些脚本可以并行运行一个使用多处理器模块的Python脚本?

我的问题是我不相信LSF知道如何将Python代码分成几个进程(我不确定LSF是如何做到这一点的)。但是,我也不想要几个Python脚本,因为它看起来效率低下且杂乱无章。

手头的任务包括解析六个非常大的ASCII文件,并将输出保存在Python dict中供以后使用。我想并行解析六个文件(每个文件大约需要3分钟)。 LSF是否允许Python告诉它类似于"嘿,这是一个脚本,但是你要将它分成这六个进程"? LSF 是否需要 Python告诉它或者它已经知道如何做到这一点?

如果您需要更多信息,请与我们联系。我很难平衡"足够的"并且"太多"背景

1 个答案:

答案 0 :(得分:3)

一种(非常简化的)思考LSF的方式是作为一个启动流程的系统,让流程知道已经为其分配了多少个核心(可能在不同的主机上)。 LSF不能阻止你的程序做一些愚蠢的事情(例如,如果它的多个实例同时运行,并且一个实例覆盖了另一个实例)。

使用LSF的一些常用方法。

  • 运行6个顺序作业,每个作业处理一个文件。这6个可以并行运行。拥有一个依赖的第七个作业,该作业在前6个完成后运行,它将前6个的输出组合成单个输出。
  • 运行在单个主机上分配了6个核心的并行作业。似乎python多处理模块在这里很适合。 env变量$LSB_MCPU_HOSTS将告诉您为作业分配了多少个核心,因此您知道创建池的大小。
  • 运行分配了6个核心的并行作业,并且可以在多个主机上运行。同样,您的进程必须能够在这些其他主机上启动。 (或使用爆炸帮助)

我不确定这三种方式中哪一种最适合您的需要。但我希望这个解释可以帮助你做出决定。