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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 29b5ab44ef73b22ef92183000378cb0aa43f6d847cd22ce531c7688161d6b844 |
|
MD5 | 551280e4d5aad27ac9df6c327140b7cb |
|
BLAKE2b-256 | 68fe9c6ca212d3687b51a8a8f4b3510681e437a844852313e31c5ba9b2847ff2 |