我有一个非常复杂的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本身应该照顾它?
答案 0 :(得分:-2)
一定要尝试使用垃圾回收。我不认为这是一个已知问题。