我有以下代码
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?
答案 0 :(得分:1)
funct
检查磁盘上的特定文件,然后加载文件,然后工作,然后保存文件。这导致我的各个进程等待输入/输出操作而不是工作。所以我在将所有初始数据传递给池之前加载了所有初始数据,并从Process
添加了multiprocessing
专用于保存池中进程将其输出放入Queue
的文件,因此只有一个过程试图保存。