python循环中释放内存的方法_python - 在python并行进程循环中释放内存 - 堆栈内存溢出...

本文探讨了在Python并行进程中如何有效管理内存,特别是在使用大型对象进行计算时遇到的内存溢出问题。作者注意到,尽管变量已重置,但内存并未如预期那样释放。文章讨论了可能的解决方案,包括在循环结束时使用`del`关键字,手动调用`gc.collect()`,以及考虑使用子进程。此外,还提到了在SLURM集群上使用mpi4py的情况,以及部分进程内存增长而其他进程保持稳定的现象。
摘要由CSDN通过智能技术生成

我正在使用主从结构来实现并行计算。 单个主进程( 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 &#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值