【发布时间】:2012-09-13 11:33:27
【问题描述】:
当我在 Windows 中运行这个 Python 脚本时,进程会增长,但看不到明显的结束:
import os
for i in xrange(1000000):
for root, dirs, files in os.walk(r"c:\windows"):
pass
我是不是误会了什么? (我使用的是 Python 2.7.3。)
【问题讨论】:
-
好吧。
C:\windows是要走的大图,对吧?挺深的。很深。进程增长如何等同于内存泄漏? -
进程通过外循环每次增长约7MB。我可以理解一次遍历使用大量内存,但之后不应该重复使用它吗?
-
@user1687669 您必须将内容加载到内存中。可能是垃圾收集器没有立即清理它,因为 GC 中有“引用计数”的概念。如果引用计数不为零,它将在内存中保留一段时间。有可能的。一种可能的内存密集型可能来自文件系统元数据。每个文件/文件夹都附加了元数据,例如模式、用户、日期等。我实际上会调查这一点,因为我的项目实际上是用文件系统做的,所以你提出这个问题真是太好了。
-
在 Windows 7 64 位下运行相同的代码,相同的 Python 版本,进程不会超过 7MB,每次外循环完成时恢复到 4MB 左右。这适用于 Python 2.7.3 的 32 位和 64 位版本。那是您正在运行的确切脚本吗?
-
是的,这就是确切的脚本。我已经在运行 32 位 Windows 7 的两台不同的机器上进行了尝试。我正在通过任务管理器的“内存 - 私有工作集”列测量使用情况。我在 Process Explorer 中得到与“私有字节”相同的结果。
标签: python memory-leaks os.walk