【发布时间】:2014-08-18 19:49:27
【问题描述】:
这里的挑战在于评估多个大文件。
什么编码会指示 Python 将有限数量的文件“加载”到内存中、处理它们、垃圾收集然后加载下一组?
def main(directory):
"""
Create AudioAnalysis Objects from directory and call object_analysis().
"""
ff = os.listdir(directory)
for f in ff:
# can we limit the number we load at one time?
audiofile = audio.LocalAudioFile(os.path.join(directory,f)) # hungry!
尝试在循环中添加audiofile = 0,但是内存分配是一样的。
据我了解,Lazy Evaluation“是一种评估策略,它会延迟表达式的评估,直到需要它的值”,但在这种情况下,我需要 延迟评估,直到有可用内存为止 .
我期待可能涉及decorator、descriptor 和/或使用 Pythons property() 函数,或者可能会缓冲或排队输入。
【问题讨论】:
-
LocalAudioFile是否将文件加载到内存中?看起来您的代码一次只在内存中保留一个文件(当前文件),每次循环加载一个新文件。 -
您是否尝试过在循环的每次迭代中触发
gc.collect? -
另外,您使用的是什么机器,即 32 位还是 64 位?还有什么操作系统?可能是其他人可以按照他们的方式管理它。我仍然很高兴,但只是为了帮助您解决内存不足的问题,我假设您有。
-
好吧,我的开发操作系统是 osx 64 位 (
sysctl hw.cpu64bit_capable returns 1),但我希望解决方案是可移植的 - 计划托管*NIX,可能使用 Linode。并且已经超过了 1GB 计划的内存限制。 -
@tobias_k 昨天尝试了 gc.collect (现在又一次),它似乎不会影响循环中发生的内存抓取。
标签: python lazy-loading lazy-evaluation