Python,捕获内存错误

时间:2018-05-01 08:11:41

标签: python python-3.x memory out-of-memory

我不会发布很多代码,而是试着描述我遇到的问题。 我的程序正在输入一个元组列表:

input = [(a, b, c), (d, e, f, g)]

对于列表中的每个元组,我的函数f()生成一个元组列表并将其转储到pickle文件中。此列表可以很小(1个元素)但也非常大(数千,数百万个元素)。我得到的更大的.pkl文件大约是9 Gb。

这一步可以像这样:

for elt in input:
    f(elt)

函数f()实际上调用了不同的方法/对象/函数,并且可以占用相当多的RAM。事实证明,我在RAM中只用了输入中的一些元素。我想跳过它们并在它发生时转到下一个(为了避免程序崩溃并在无法完成之后对其他输入进行计算)。

即:

for elt in input:
    try:
        f(elt)
    except:
        continue

我的问题是,我读到内存错误是非常讨厌的,并且无法始终从中恢复。

实施此尝试/除安全性的最佳方式是什么? 有没有办法在for循环迭代之间清除内存?

编辑澄清:

还有一点。我在装有128 Gb RAM的PC上运行程序。但是,我没有只运行一次。我在input1上的一个线程中运行一次,在input2上的另一个线程中运行一次,依此类推。我有10个跑步。线程的组合在给定时刻在内存中加载太多。 但是,通过在某些线程(具有安全性)上进行下一次迭代,应该避免这种情况。

这种方法的主要资产(而不是减少线程数)是,如果我在具有8 Gb RAM的笔记本电脑上运行程序,只在一个线程中,它仍然可以工作。如果其中一个迭代需要的内存超过可用RAM(这将在具有8 Gb RAM的笔记本电脑上发生),它只是跳过它并转到下一个。

方法对我很直接,但我不知道如何在python上实现它,因为恢复内存错误并不安全。

0 个答案:

没有答案