Google OR Tools带时间窗VRP开发:选lru_cache还是升级用@cache?
关于是否需要升级Python 3.9使用
@cache装饰器的解答 核心结论
单纯为了使用@cache装饰器不需要升级Python 3.9,现有3.7版本的@lru_cache已经可以实现完全一致的效果
两种装饰器的底层差异
- Python 3.9新增的
functools.cache本质是functools.lru_cache(maxsize=None)的语法糖,底层实现逻辑完全一致,没有额外的性能优化 - 你当前使用的Python 3.7.4完全支持
lru_cache,只需要配置@lru_cache(maxsize=None)即可获得和@cache完全相同的无大小限制缓存能力
OR-Tools VRP场景缓存注意事项
- 缓存仅适用于参数为可哈希类型的函数,比如距离矩阵计算、时间窗规则校验、需求点属性预处理这类逻辑
- OR-Tools的路由模型实例、求解器实例属于不可哈希类型,无法作为缓存键,不要尝试对这类实例相关的方法加缓存
升级Python 3.9的额外参考收益(可选)
如果没有旧代码兼容性限制,升级到3.9也有额外好处,可根据自身情况判断:
- Python 3.7已经停止官方维护,3.9版本有更高的安全性、bug修复,部分原生运算性能比3.7高5%~10%
- 新版Google OR-Tools已经逐步停止对Python 3.7的支持,后续如果要升级OR-Tools获取最新的VRP求解优化,升级Python版本是必要前提
内容的提问来源于stack exchange,提问作者Hanna
相关产品推荐
相关产品推荐

