我编写了一个扫描程序,以在要扫描的系统的所有硬盘上查找某些文件。其中一些系统相当老,可以运行带有256或512 MB RAM的Windows 2000,但是文件系统结构很复杂,因为其中一些充当文件服务器。
我在脚本中使用os.walk()来解析所有目录和文件。
不幸的是,我们注意到扫描程序经过一段时间的扫描后会消耗大量RAM,并且我们发现os.walk函数仅在文件系统上运行2小时后就使用了约50 MB的RAM。随着时间的流逝,此RAM使用量会增加。扫描4小时后,我们有了大约90 MB的RAM。
有办法避免这种行为吗?我们还尝试了“betterwalk.walk()”和“scandir.walk()”。结果是一样的。
我们是否需要编写自己的walk函数,以从内存中删除已扫描的目录和文件对象,以便垃圾回收器可以不时删除它们?
谢谢
最佳答案
您是否尝试过glob模块?
import os, glob
def globit(srchDir):
srchDir = os.path.join(srchDir, "*")
for file in glob.glob(srchDir):
print file
globit(file)
if __name__ == '__main__':
dir = r'C:\working'
globit(dir)
关于Python os.walk内存问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24474172/