【发布时间】:2020-10-12 02:44:36
【问题描述】:
我想在 Kaggle 上使用 Jupyter Notebook 循环处理许多 mp3 文件。然而,以二进制形式读取 mp3 文件似乎会将文件保留在内存中,即使在函数返回并且文件已正确关闭之后也是如此。这会导致内存使用量随着每个文件的处理而增长。问题似乎出在read() 函数中,因为pass 不会导致任何内存使用量增长。
在循环播放 mp3 文件时,内存使用量的增长等于正在处理的文件的大小,这表明文件保存在内存中。
函数返回后如何读取文件而不将其保存在内存中?
def read_mp3_as_bin(fname):
with open(fname, "rb") as f:
data = f.read() # when using 'pass' memory usage doesn't grow
print(f.closed)
return
for fname in file_names: # file_names are 25K paths to the mp3 files
read_mp3_as_bin(fname)
“解决方案”
我确实在本地运行了这段代码,并且根本没有内存使用量增长。因此,看起来 Kaggle 确实以不同的方式处理文件,因为这是该测试中唯一的变量。我会尝试找出为什么这段代码在 Kaggle 上的行为不同,当我知道更多时会告诉你。
【问题讨论】:
-
您如何验证文件是否保留在内存中?
-
你能告诉我们你怎么知道文件还在内存中吗?函数结束后,
data无法保存在内存中。 -
我添加了一些额外的信息,内存使用增长等于正在处理的文件的大小,这表明文件正在保存在内存中。