栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python:lru

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python:lru

缓存是什么?缓存是一门优化技术,就是将数据存放在比访问源数据成本更低、速度更快的位置上。 比如别人在微信上发送一个文件给你,你第一次访问可能要下载这源文件,然后下载到本地,等你下一次在打开它的时候,其实是从本地打开的。 那么这里的本地存放位置相当于是“缓存”,它比再去访问源文件,比如要下载,速度更快、成本更低。

1. lru_cache装饰器是什么了?

我们可以用一个字典来模拟这种策略,比如定义一个dict,如果该元素不在dict中,我们就push进去,但是这样就会存在一个问题,这个dict的数目会越来越多,因为它没有丢弃的过程,最后可能会导致缓存崩溃。因此,一个好的缓存丢弃(驱除)策略是十分必要的。下图是常见的缓存驱除策略,这里我们以LRU (Least recent used,最近最少使用策略)。

2. 它的主要思想

就是丢弃最近最不常用的条目(数据)。

3. 它的主要实现原理

它首先会定义一个“缓存池”,可能比喻不是特别恰当。当新来的一个数据,我们把他放到队列的开头,下次遇到新的数据时候,我们将新的数据放到开头;如果遇到之前的数据,那我们将这个数据从缓存中拿出,重新放到开头,相当于重新加入缓存。当加入的数据超过“缓存池”的大小的时候,比如这里的maxsize=128,一般是2的倍数?幂次?。这个时候我们可能需要驱除缓存(缓存丢弃、缓存命中),我们开始丢弃“缓存池”最下方的数据,保存“缓存池” 容量的不变性。

4.它的主要应用场景

针对存在递归、或者大量复杂重复性访问的时候,使用LRU_Cache装饰器不乏是一个不错的选择。比如这里通过路径访问背景图像,存放成PIL时候,它是会进行大量的读取背景图像,同时的话,可能会遇到重复的情况,因为背景图像就那么多。这个时候,如果访问的路径已经存在过了,且在“缓存池”中,那么我们就可以直接进行读取内存中PIL数据,而不需要在open,转RGBA了。

5.参考
  1. 在 Python 中使用 LRU 缓存策略
  2. python实现LRU缓存淘汰

好像很久没写博客了。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/619318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号