Python性能优化:增大正则表达式编译缓存

Python020

Python性能优化:增大正则表达式编译缓存,第1张

关键词:正则表达式 | 缓存 | 性能优化

Python 3 的 re 库中,对正则表达式的编译函数 re.compile() 调用了私有函数 re._compile() ,但更根本上编译的计算是由 sre_compile.compile() 完成的,而 re._compile() 中对编译好的表达式进行了缓存,使用 _MAXCACHE 将缓存大小硬编码为512。以下是 re._compile() 的源码,摘自: https://github.com/python/cpython/blob/3.5/Lib/re.py (3.6,3.7里也没有变化)

在某些 大规模应用场景 下,512的缓存显然太小了一些,为了摆脱这个瓶颈但不去碰cpython的源码,我们可以自己改写 re._compile() ,从而实现自定义缓存大小( max_regex_cache ),轻松排个10000出来。原函数里很多语句都不知道干嘛用的,但照葫芦画瓢总没错。

调用方法:

进一步优化是将这个类变成Singleton(之后我应该会专门写一篇),以及 多模块共享 。

实际上python 是脚本语言解释执行的,并不存在编译这个概念。

python -m py_compile file.py

python -m py_compile {file1,file2}.py

编译成pyc文件

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的

python -O -m py_compile file.py

编译成pyo文件。

pyo是优化编译后的程序 python -O 源文件即可将源程序编译为pyo文件

还有就是第三方工具如:py2exe, pyinstaller等可把你的脚本打包成执行文件。

1、下载pyinstaller

目前pyinstaller支持的python版本为2.3-2.7,可以到http://www.pyinstaller.org/官网下载。

2、安装

下载完成后,解压即可。

3、pyinstaller使用方法

使用也非常的简单,cmd下进入解压出来的目录,执行如下命令。

python pyinstaller.py [opts] yourprogram.py

主要选项包括:

-F, –onefile 打包成一个exe文件。

-D, –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。

-c, –console, –nowindowed 使用控制台,无界面(默认)

-w, –windowed, –noconsole 使用窗口,无控制台

更详细的使用方法请参考下载包里的doc目录下的Manual.html文件。