代码 已 更改。
在Python
2.7中,缓存是一个简单的字典。如果其中
_MAXCACHE存储了多个项目,则在存储新项目之前将清除整个缓存。缓存查找只需要构建一个简单的键并测试字典,请参见2.7的实现
_compile()
在Python 3.x中,缓存已由
@functools.lru_cache(maxsize=500,typed=True)decorator代替。这个装饰做
多
更多的工作,包括螺纹锁固,调整缓存LRU队列和维护缓存统计信息(通过访问
re._compile.cache_info())。参见3.3.0执行
_compile()和
functools.lru_cache()。
其他人也注意到了同样的减速,并在Python
Bugtracker中提交了问题16389。我希望3.4会再次更快。要么
lru_cache改进实现,要么
re模块将再次移至自定义缓存。
更新:对于版本4b4dddd670d0(hg)/
0f606a6(git),缓存更改已恢复为3.1中的简单版本。Python版本3.2.4和3.3.1包括该修订版。
从那时起,在Python
3.7中,模式缓存已根据常规更新为自定义FIFO缓存实现
dict(依赖于插入顺序,并且与LRU不同,它不考虑撤出时最近使用缓存中的项目的最新情况)。



