V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Buffer2Disk
V2EX  ›  问与答

Python OrderedDict 存在内存泄漏的问题

  •  
  •   Buffer2Disk · 2018-11-13 11:42:31 +08:00 · 1162 次点击
    这是一个创建于 2202 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道有 V 友们有用过这个类的吗? python 2.7 新加的

    使用过程中发现貌似存在内存泄漏问题,用 pympler 监控对象的内存, 发现 OrderedDict 对象 和 list 随着时间不断的缓慢增长(OrderedDict 对象的数量没有增加,内存占用却不断缓慢的增长)

    这里有一个关于 OrderedDict 内存泄漏的介绍: https://stackoverflow.com/a/46935255/2379891

    不过我没有像文中作者那样去 clear,而是不断的 del orderedDict[key], dump 内存中的对象后,也发现了不少和文中作者所说的那种 self-referencing list

    使用 OrderedDict 主要是为了实现一个 LRU 缓存(基于缓存失效时间 timeout),不知道 python 官方有没有高性能的 LRU cache 的实现

    2 条回复    2018-11-14 10:22:09 +08:00
    Arnie97
        1
    Arnie97  
       2018-11-14 01:13:33 +08:00 via Android
    Python 3 标准库有 functools.lru_cache,不过没有 timeout
    Buffer2Disk
        2
    Buffer2Disk  
    OP
       2018-11-14 10:22:09 +08:00
    @Arnie97 是的,有点蛋疼,网上找了一个第三方的 OrderedDict 实现,https://pypi.org/project/ruamel.ordereddict/

    号称是速度很快,但是换上以后 cpu 飙升。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1095 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.