python babel包解析locale性能慢的问题
背景
Babel 是Python 的一个国际化工具包,公司的一个系统用到它来处理国际化,其中一个场景是解析locale,即:
x
babel.Locale.parse("zh_CN")
在导出一张很大的报表时,总共调用了parse 9万多次,花费了将近130秒,这个时间是无法接受的。
解决
在babel项目的issue中,找到了同样问题的描述 https://github.com/python-babel/babel/issues/620,并且在一PR中已经得到优化 https://github.com/python-babel/babel/pull/644。
优化后的版本为2.7.0,所以最终解决办法是升级babel。卸载重装babel:
xxxxxxxxxx
pip uninstall babel
pip install babel==2.7.0
对比试验
将下面程序分别在babel 2.3.4版本和babel 2.7.0版本执行:
x
# -*- coding:utf-8 -*-
import timeit
import babel
cost = timeit.timeit(lambda: babel.Locale.parse("zh_CN"), number=100000)
version = babel.__version__
print("cost %.2fs in babel %s" % (cost, version))
得到如下执行结果:
label 2.3.4
x
cost 204.68s in babel 2.3.4
label 2.7.0
x
cost 11.12s in babel 2.7.0
可以看出优化后的效果还是相当显著的。足足快了一个数量级。