Python内存错误 - 如何强制删除对象
我有一个程序,它会处理多个文件,并为每个文件生成一个报告。生成报告的部分是一个单独的函数,它接收一个文件名,然后返回结果。在生成报告的过程中,程序会把一些中间结果保存在内存中,因为这些结果可能会在报告的多个部分中使用,这样可以避免重复计算。
当我在一个文件夹中运行这个程序时,它会运行一段时间,然后因为内存不足而崩溃。如果我再次在同一个文件夹中运行它,它会跳过那些已经成功生成报告的文件,继续处理其他文件。它会处理几个文件后又会崩溃。
那么,为什么在生成报告的函数调用结束后,所有资源没有被清理,或者至少没有被标记为可以回收呢?没有对象在离开,我也没有使用任何全局对象,并且在处理完每个文件后,所有打开的文件都被关闭了。
有没有办法让我确认没有额外的引用指向某个对象?在Python中,有没有办法强制进行垃圾回收?
关于实现和缓存的更多细节。每个报告都有几个元素,每个元素可能依赖于不同的计算,而每个计算又可能依赖于其他计算。如果某个计算已经完成,我不想再做一次(因为这些计算通常比较耗时)。
这是缓存的简化版本:
class MathCache:
def __init__(self): self.cache = {}
def get(data_provider):
if not data_provider.id in self.cache:
self.cache[data_provider.id] = data_provider.get_value(self)
return self.cache[data_provider.id]
它的一个实例被创建,然后传递给报告中的每个元素。这个实例只在报告创建方法中的一个局部引用中保留。
所有的数据提供者都继承自一个公共类,这个类的作用是根据构造函数的参数和类名生成一个唯一的ID。我将MathCache作为数据提供者传递,因为数据提供者本身可能依赖于其他计算。