多处理模块在集群上的行为

时间:2015-02-20 12:11:39

标签: python multiprocessing cluster-computing qsub

有些模块适合在群集上进行多处理,列出here。但我有一个已经使用multiprocessing模块的脚本。 This answer指出在集群上使用此模块只会让它在节点内创建进程。但是这种行为是什么样的?

假设我有一个名为multi.py的脚本,它看起来像这样:

import multiprocessing as mp

output = mp.Queue()

def square(num, output):
""" example function. square num """
res = num**2
output.put(res)

processes = [mp.Process(target=square, args=(x, output)) for x in range(100000)]

# Run processes
for p in processes:
   p.start()

# Exit the completed processes
for p in processes:
    p.join()

# Get process results from the output queue
results = [output.get() for p in processes]

print(results)

我会将此脚本提交给集群(例如Sun Grid Engine):

#!/bin/bash
# this script is called run.sh
python multi.py

的qsub:

qsub -q short -lnodes=1:ppn=4 run.sh

会发生什么? python是否会在qsub命令中指定的边界内生成进程(仅限4个CPU)?或者它会尝试使用节点上的每个CPU吗?

1 个答案:

答案 0 :(得分:1)

您的qsub调用为每个节点提供4个处理器,包含1个节点。因此multiprocessing将限制为最多使用4个处理器。

顺便说一下,如果你想进行分层并行计算:使用套接字或ssh跨多个集群,使用MPI并与集群调度程序协调,并使用多处理和线程......你可能想看看pathos它的姊妹包pyina(与MPI和集群调度程序交互)。

例如,请参阅:https://stackoverflow.com/questions/28203774/how-to-do-hierarchical-parallelism-in-ipython-parallel

在此处获取pathoshttps://github.com/uqfoundation