一个快速的替换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.483.09e-3
^{tt9}$0.039.90e-6
speedup16x306x

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的加速!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用spring并在CXF中生成服务器和客户端   重载是否可以重载抽象Java类中的抽象方法,但只实现子类中的一个重载方法?   javawhy系统。currentTimeMillis()是否生成不正确的长值?   java使用Apache POI API将xlsx转换为csv   资源Java找不到文件?   java APDU命令验证返回6a88   JAVAlang.ExceptionInInitializerError是在交换机中构造对象时创建的   java使用嵌套while循环打印星形金字塔   sql Java ResultSet获取返回的字段名   java无法将字符串更改为整数,因为负号跟在数字后面   为什么番石榴/爪哇使用“可能”。isPresent()与可选项相反。是否显示(可能)?   JavaJUnit4看不到bean   JavaJBoss以错误的顺序启动servlet   java无法下载Maven依赖项AnypointStudio   安卓如何在java中存储持久数据   java SQL Server JDBC的驱动程序类名是什么   java中针对大输入的性能优化BufferedReader   java eclipse自动完成内容助理