gpt4 book ai didi

Python 内存泄漏 - 为什么会发生?

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:28 25 4
gpt4 key购买 nike

关于我的问题的一些背景知识,我正在导入一个由其他人编写的模块 data_read_module.pyd,但我看不到该模块的内容。

我有一个文件,我们称它为 myfunctions。暂时忽略###,我稍后会评论评论的部分。

import data_read_module

def processData(fname):
data = data_read_module.read_data(fname)
''' process data here '''
return t, x
### return 1

我在一个更大的程序框架内调用它,特别是一个 TKinter GUI。出于这篇文章的目的,我已经精简到最基本的内容。在 GUI 代码中,我按如下方式调用上面的代码:

import myfunctions 

class MyApplication:
def __init__(self,parent):
self.t = []
self.x = []

def openFileAndProcessData(self):
# self.t = None
# self.x = None
self.t,self.x = myfunctions.processData(fname)
## myfunctions.processData(fname)

我注意到每次运行 openFileAndProcessData 时,Windows 任务管理器都会报告我的内存使用量增加,因此我认为我的 GUI 应用程序中存在内存泄漏。所以我首先尝试的是

# self.t = None
# self.x = None

你看到上面的评论。接下来,我尝试调用 myfunctions.processData 而不将输出分配给任何变量,如下所示:

## myfunctions.processData(fname)

这也没有效果。作为最后的努力,我更改了 processData 函数,使其仅返回 1,甚至不处理来自模块 data_read_module.pyd 的任何数据。不幸的是,即使这样也会导致每次连续调用 processData 时占用更多内存,从而将问题缩小到 data_read_module.read_data。我认为在 Python 框架内,这是自动处理的确切类型的事情。引用this website ,似乎函数占用的内存会在函数终止时释放。在我的例子中,我希望在调用后释放 processData 中使用的内存 [我使用 self.t 和 self.x 跟踪的输出除外]。我知道如果无法访问 data_read_module.pyd,我将无法解决此类问题,但我想了解这一切是如何发生的。

最佳答案

.pyd 文件基本上是一个 DLL。您正在调用用 C、C++ 或其他此类编译语言编写的代码。如果该代码分配内存但未正确释放它,您将发生内存泄漏。从 Python 调用代码这一事实不会神奇地修复它。

关于Python 内存泄漏 - 为什么会发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com