一个快速的替换pygments“get”、“guess”、“funtions”的插件
pygments_cache的Python项目详细描述
一个快速的替换pygmentsget_*()和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
缓存本身存储在由^{tt3}给定的位置$ 环境变量,或者默认为~/.local/share/pygments-cache/cache.py。 缓存文件是在第一次使用时创建的,如果它不存在的话。
如果在缓存中找不到Pygements扩展,则此处列出的API函数 将回退到原始pygments版本并将扩展添加到 供将来使用的缓存。也就是说,缓存将发现并保存新的扩展 如你所料。
如果出于某种原因需要重置缓存,只需删除 $PYGMENTS_CACHE_FILE来自您的文件系统。下次你打电话给 api函数,将重新生成缓存。或者,你可以 使用^{tt6}手动重建缓存(删除文件后)$ 功能。
缓存本身可以作为pygments_cache.CACHEdict完全访问。
这个项目是以单个文件的形式实现的,这样就很容易重新分发。 请随意将此文件复制到您自己的项目中!
比较
注意:以下所有测试都在xonsh中。
tl;dr table:以秒为单位的所有计时。
^{tt8}$ | 0.48 | 3.09e-3 |
^{tt9}$ | 0.03 | 9.90e-6 |
speedup | 16x | 306x |
从cold start(即第一次导入和使用)开始,pygments可能需要很长时间 获得单个Lexer的时间(大约半秒),如下所示:
$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
Pygcache缓存项目加快了这一速度,假设缓存文件已经存在。 可以在此处看到计时:
$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
这表示16x加速。然而,0.03秒的大部分时间实际上是从python本身开始的 启动和关闭。
更公平的测试是查看get_lexer_for_filename()函数运行需要多长时间 启动python并导入函数后。
从热启动开始,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缓存只需要9.9微秒,如下所示。
$ 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
这是306x的加速!