python循环一次释放内存_python并行进程循环中的内存释放

堵毅然
2023-12-01

我使用主从结构来实现并行计算。一个主进程(0)加载数据,并将相关的块和指令分发给从属进程(1-N),这些进程使用大对象完成繁重的工作。。。废话。问题是内存使用情况,我使用resource.getrusage(resource.RUSAGE_SELF).ru_maxrss对每个从属进程进行监控。在

第一个任务使用大约6GB的内存,正如预期的那样,但是当slave接收到第二个任务时,它会膨胀到刚好超过10GB——就像之前的内存没有被收集一样。我的理解是,一旦一个变量丢失了它的引用(在下面的代码中,当_gwb变量被重置时),垃圾回收应该清理干净。为什么没有发生这种事?在

在每个循环结束时抛出一个del _gwb会有帮助吗?

手动调用gc.collect()怎么样?

或者我需要生成subprocesses作为described in this answer?在

我在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 = stat.Get_source()

# Store Results

if tag == TAGS.DONE:

_store_slave_results(data, ...)

num_done += 1

elif tag == TAGS.READY:

# Distribute tasks

comm.send(sim_data, dest=src, tag=TAGS.START)

# Stop searching, move to next task

search = False

cycles += 1

以及那些奴隶们:

^{pr2}$

编辑:其他一些奇怪的微妙之处(以防它们可能相关):

1) 只有一些进程显示内存在增长,其他进程大致保持不变;

2) 在不同的从进程上,活动内存的具体数量是不同的(不同的是100s of MB)。。。即使它们必须运行相同的代码!在

 类似资料: