我有以下代码
import multiprocessing as mp
import os
def funct(name):
if nameisvalid:
do_some_stuff_and_save_a_file
return 1
else:
return 0
num_proc = 20 #or a call to slurm/mp for number of processors
pool = mp.Pool(processes=num_proc)
results = pool.map_async(makeminofname, [n for n in nameindex])
pool.close()
pool.join()
我已经在具有
num_proc=mp.cpu_count()
的6核处理器的桌面上运行了该脚本,它运行良好且速度很快,但是当我尝试在我们的处理群集上的sbatch脚本中以-N 1 -n 20(我们的每个节点都有24个处理器或任意数量的处理器,它运行速度非常慢,而且似乎只使用10-15个处理器。有什么方法可以优化多重处理以使用Slurm吗? 最佳答案
funct
检查磁盘上的特定文件,然后加载文件,然后工作,然后保存文件。这导致我的各个进程一直在等待输入/输出操作而不是工作。因此,我在将所有初始数据传递到池之前加载了所有初始数据,并从Process
添加了一个multiprocessing
专用于保存来自Queue
的文件,池中的进程将它们的输出放入其中,因此只有一个进程试图保存。
关于python - Python多重处理在本地运行的速度比在群集上运行的速度快(slurm),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33817691/