【发布时间】:2015-02-20 12:11:38
【问题描述】:
有些模块适合集群上的多处理,列出了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?
【问题讨论】:
标签: python multiprocessing cluster-computing qsub