【发布时间】:2014-08-19 21:11:25
【问题描述】:
我编写了一个扫描仪,它在被扫描的系统的所有硬盘驱动器上查找某些文件。其中一些系统相当陈旧,运行 Windows 2000,内存为 256 或 512 MB,但文件系统结构很复杂,因为其中一些用作文件服务器。
我在脚本中使用 os.walk() 来解析所有目录和文件。
不幸的是,我们注意到扫描程序在扫描一段时间后会消耗大量 RAM,并且在遍历文件系统 2 小时后,我们发现仅 os.walk 函数就使用了大约 50 MB 的 RAM。这种 RAM 使用量会随着时间的推移而增加。扫描 4 小时后,我们有大约 90 MB 的 RAM。
有没有办法避免这种行为?我们还尝试了“betterwalk.walk()”和“scandir.walk()”。结果是一样的。 我们是否必须编写自己的 walk 函数从内存中删除已扫描的目录和文件对象,以便垃圾收集器可以不时删除它们?
谢谢
【问题讨论】:
-
一种解决方法是使用 unicode 路径。
-
Python 版本 2.7.4 包含该修复程序,因此升级您的 Python 版本也应该有所帮助。
-
我使用的是 2.7.7 版本,它仍然是我描述它的方式。也许这不是同一个问题?我将尝试使用 unicode 表示。
-
你能在 Linux、OSX 上重现它吗?