You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python pathlib的Path.glob()遍历大文件系统时内存持续增长问题

为什么Path.glob("**/*")遍历大目录时内存会持续攀升?

你对生成器的理解没错,但Path.glob("**/*")的底层实现藏着容易忽略的内存开销:

  • pathlib的glob基于标准库glob模块实现,处理**递归匹配时,为了避免符号链接引发的无限循环,它会维护一个全局缓存,存储所有已访问目录的inode和设备号。
  • 遍历Linux根目录这种超大型文件系统时,随着目录数量不断增加,这个缓存会持续膨胀——每访问一个新目录,就会把它的inode信息存入缓存,直到生成器完全耗尽才会释放。这就是内存持续上涨的核心原因。
  • 你测试代码里的Path实例本身占用的内存其实很少,真正的内存大头是这个隐式的目录缓存。

如果要解决这个问题,可以换用os.scandir()实现递归遍历,手动控制缓存逻辑,比如下面的示例:

import os

def recursive_scandir(path):
    for entry in os.scandir(path):
        if entry.is_dir(follow_symlinks=False):
            yield from recursive_scandir(entry.path)
        yield entry.path

这个实现不会全局缓存所有已访问目录,只会在递归调用栈中保留当前层级的信息,内存占用会保持稳定。

内容的提问来源于stack exchange,提问作者Zeroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:57:22