Expiring Dict自动过期功能失效,是否已废弃?求替代方案
expiringdict状态排查及替代方案
一、expiringdict的维护状态
expiringdict未被官方标记为废弃,但GitHub仓库已无活跃更新,最近一次发布在1年半前,属于维护停滞状态,出现问题后无法得到及时的官方修复支持。
二、你的过期失效问题分析
从提供的测试代码来看,你导入的是expiring_dict(带下划线),但官方正版expiringdict的包名是expiringdict(无下划线)——这大概率是你安装了第三方仿冒包,而非官方版本。
若确认使用的是官方包,expiringdict的过期清理并非后台实时执行,而是在访问、修改字典或手动调用清理方法时触发。你的测试中直接调用items(),部分版本不会自动触发过期检查,可手动调用cleanup()解决:
from expiringdict import ExpiringDict import time denms = ExpiringDict(max_age_seconds=3) denms["john"] = "doe" time.sleep(10) denms.cleanup() # 手动触发过期清理 print(list(denms.items())) # 此时应输出空列表
三、成熟替代包
推荐以下几个维护活跃、功能稳定的替代方案:
- cachetools:Python生态中广泛使用的缓存工具,支持TTL、LRU等多种缓存策略,文档完善,更新频繁。示例:
from cachetools import TTLCache import time cache = TTLCache(maxsize=100, ttl=3) cache["john"] = "doe" time.sleep(10) print(list(cache.items())) # 输出空列表 - functools.lru_cache:Python标准库自带(Python 3.9+支持
ttl参数),适合函数结果缓存场景,无需额外安装:from functools import lru_cache import time @lru_cache(maxsize=100, ttl=3) def get_name(): return "doe" print(get_name()) # 输出"doe" time.sleep(10) print(get_name.cache_info()) # 可见缓存已失效 - requests-cache:针对HTTP请求缓存优化的库,兼容requests,支持TTL过期,适合网络请求场景。
内容的提问来源于stack exchange,提问作者André Clérigo
相关产品推荐
相关产品推荐

