首页 > 解决方案 > Python内存问题-完成方法后内存没有释放

问题描述

我有一个非常复杂的 python(ubuntu 上为 2.7)代码,它意外地泄漏了内存。分解它,它是一个重复调用的方法(并且它本身调用不同的方法)并返回一个非常小的对象。完成该方法后,使用的内存不会被释放。据我所知,保留一些内存供以后使用并不罕见,但如果我使用足够大的输入,我的机器最终会消耗所有内存并冻结。如果我将子进程与 concurrent.futures ProcessPoolExecutor 一起使用,情况并非如此,因此我需要假设这不是我的代码而是一些潜在的问题?!

这是一个已知的问题?这可能是我正在使用的第 3 方库(例如 PyQgis)中的问题吗?我应该从哪里开始寻找问题?

一些更多的背景来消除愚蠢的原因(因为我还是有点初学者):

该方法使用了一些全局变量,但据我了解,这些变量应该只在声明它们的文件中处于活动状态,并且无论如何都应该在下一次调用该方法时被覆盖?!用伪代码澄清:

def main():
    load input from file
    for x in input:
        result = extra_file.initialization(x)
        #here is the point where memory should get released in my opinion

#extra file
def initialization(x):
    global input
    input = x
    result_container = []
    while not result do:
        part_of_result = method1()
        result_container.append(part_of_result)
        if result_container fulfills condition to be the final result:
            result = result_container
    del input
    return result

def method1():
    #do stuff
    method2()
    #do stuff
    return part_of_result

def method2():
    #do stuff with input not altering it

涉及许多不同的方法和全局变量,全局声明用于不通过多个甚至不使用它们的方法传递 5 个不同的输入变量。

我应该尝试使用垃圾收集吗?完成方法后的所有引用都应该删除,python 自己应该处理它吗?

标签: pythonmemory

解决方案


绝对尝试使用垃圾收集。我不相信这是一个已知问题。


推荐阅读