跳转到主要内容

pygments的`get_*()`和`guess_*()`函数的快速替代品

项目描述

pygments的`get_*()`和`guess_*()`函数的快速替代品。

以下pygments API函数目前在此提供

from pygments_cache import get_lexer_for_filename, guess_lexer_for_filename
from pygments_cache import get_formatter_for_filename, get_formatter_by_name
from pygments_cache import get_style_by_name
from pygments_cache import get_filter_by_name

缓存本身存储在由环境变量$PYGMENTS_CACHE_FILE指定的位置,或默认在~/.local/share/pygments-cache/cache.py。如果该文件不存在,则首次使用时创建缓存文件。

如果在缓存中找不到pygements扩展,则列出的API函数将回退到原始pygments版本,并将扩展添加到缓存以供将来使用。也就是说,缓存将像您期望的那样发现并保存新的扩展。

如果您需要出于某种原因重置缓存,只需从文件系统中删除$PYGMENTS_CACHE_FILE。下次您调用API函数之一时,缓存将重新生成。或者,您可以使用load_or_build()函数(删除文件后)手动重新构建缓存。

缓存本身完全以pygments_cache.CACHE字典的形式可访问。

此项目作为单个文件实现,使其易于分发。请随意将此文件复制到您的项目中!

比较

注意:以下所有测试均在xonsh中完成。

快速参考表:所有时间均为秒。

pygments

0.48

3.09e-3

pygments_cache

0.03

9.90e-6

加速

16倍

306倍

从冷启动(即第一次导入和使用)开始,Pygments可能需要很长时间(大约半秒)才能获取一个词法分析器,如下所示:

$ time -p python -c! from pygments.lexers import get_lexer_for_filename; get_lexer_for_filename('index.html')
real 0.48
user 0.46
sys 0.01

pygments-cache项目大大加快了这一过程,前提是缓存文件已经存在。时间如下所示

$ time -p python -c! from pygments_cache import get_lexer_for_filename; get_lexer_for_filename('index.html')
real 0.03
user 0.03
sys 0.00

这代表了16倍的加速。然而,0.03秒的大部分时间实际上来自Python自身的启动和关闭。

更公平的测试是查看Python启动并将函数导入后,get_lexer_for_filename()函数运行所需的时间。

从热启动开始,Pygments本身大约需要3毫秒,如下所示:

$ from pygments.lexers import get_lexer_for_filename
$ timeit! get_lexer_for_filename('index.html')
100 loops, best of 3: 3.09 ms per loop

或者,pygments-cache仅需9.9 µs,如下所示。

$ from pygments_cache import get_lexer_for_filename
$ timeit! get_lexer_for_filename('index.html')
100000 loops, best of 3: 9.9 µs per loop

这是306倍的加速!

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

pygments_cache-0.1.3.tar.gz (6.5 kB 查看哈希值)

上传时间

支持者