我编写了一个扫描程序,以在要扫描的系统的所有硬盘上查找某些文件。其中一些系统相当老,可以运行带有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/

10-12 21:38