我正在使用主从结构来实现并行计算。 单个主进程( 0 )加载数据,并将相关的块和指令分配给使用大型对象进行繁重工作的从属进程( 1 N )……等等等等。 问题是内存使用情况,我正在每个从属进程上使用resource.getrusage(resource.RUSAGE_SELF).ru_maxrss进行监视。
正如预期的那样,第一个任务使用了大约6GB的内存,但是当从属设备接收到第二个任务时,它最多会膨胀到10GB以上-好像没有在收集以前的内存。 我的理解是,只要变量释放其引用(在下面的代码中,当_gwb变量被重置时),垃圾收集_gwb清理干净。 为什么不发生这种情况?
在每个循环结束时添加del _gwb会有所帮助吗?
手动调用gc.collect()怎么样?
还是我需要按照此答案中的描述生成subprocess es?
我在SLURM托管群集上使用mpi4py 。
主过程看起来像:
for jj, tt in enumerate(times):
for ii, sim in enumerate(sims):
search = True
# Find a slave to give this task to
while search:
# Repackage HDF5 data into dictionary to work with MPI
sim_dat = ... # load some data
# Look for available slave process
data = comm.recv(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG)
src &#