【问题标题】:Setting cachetools LRUCache with maximum size设置 cachetools LRUCache 的最大大小
【发布时间】:2020-08-28 07:09:12
【问题描述】:

试图设置cachetools cache class - 更具体地说,LRUCache 继承自它。
我想根据字节设置maxsize - 这意味着我需要使用一些lambda 函数设置getsizeof 参数来计算对象的字节大小。

查看sys.getsizeof,我们可以看到它不适合,因为我将在缓存自定义类中保存引用\句柄到其他对象,这将是批评者质量。

任何想法如何计算python自定义对象的内存中的实际字节及其包含的内容,这意味着还计算引用的大小(不是指针大小,而是它的内容)

谢谢

【问题讨论】:

    标签: python python-3.x caching


    【解决方案1】:

    最简单的方法是使用pympler package,他们已经实现了你想要的功能。

    python -m pip install pympler
    
    from pympler import asizeof
    from cachetools import LRUCache
    
    @LRUCache(MAX_BYTES, getsizeof=asizeof.asizeof)
    def foo():
        pass
    

    【讨论】:

    • stackoverflow.com/a/40832098/965778 - 据此,我不相信这是适合我的包,例如没有看到任何概念证明。还是谢谢
    • 当你尝试使用它时会发生什么?文档说它是字节大小。您链接的 stackoverflow 问题是关于内存大小与腌制对象大小的关系。
    • 我觉得不错!我担心的不是 pympler 的准确性而是性能——我正在编写一个 ML 应用程序,它可能有许多 GB 的集合。我已经实现了基于磁盘的备份缓存,但现在也想调整内存缓存。 pympler 对于非常大的对象是个好主意吗?
    • numpy 数组的 UPDATE 至少效果很好! (数组大小的次线性时间)我猜这个问题只会是复杂的python对象。
    猜你喜欢
    • 2013-12-04
    • 2018-06-27
    • 2011-08-11
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多