有些模块适合在群集上进行多处理,列出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吗?
答案 0 :(得分:1)
您的qsub
调用为每个节点提供4个处理器,包含1个节点。因此multiprocessing
将限制为最多使用4个处理器。
pathos
它的姊妹包pyina
(与MPI和集群调度程序交互)。
例如,请参阅:https://stackoverflow.com/questions/28203774/how-to-do-hierarchical-parallelism-in-ipython-parallel
在此处获取pathos
:https://github.com/uqfoundation