python - 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 自己应该处理它吗?
解决方案
绝对尝试使用垃圾收集。我不相信这是一个已知问题。
推荐阅读
- javascript - 如何使用 Express res.send() 发送数组
- python - 在我的数据框上应用 PCA 后,它给了我一个奇怪的数字,它是什么意思或我该如何解释它?
- python - 从具有堆叠价格的数据框中计算股票收益
- c++ - 具有分段错误的函数模板
- c# - 如何动态地将行添加到自适应卡?
- sql - 将长数字导出到 Excel 的 CSV 文件
- c# - GenerateRadioButton() 问题
- opencascade - OpenCASCADE 教程中 `BRepLib::BuildCurves3d` 调用的目的是什么?
- hibernate - SpringBoot @Transactional 在异常后不刷新会话
- spring - 无法写入 JSON:无限递归