Python内存问题-完成某个方法后不会释放内存

时间:2018-10-26 15:01:09

标签: python memory

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

这是一个已知问题吗?在我使用的第三方库(例如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本身应该照顾它?

1 个答案:

答案 0 :(得分:-2)

一定要尝试使用垃圾回收。我不认为这是一个已知问题。