matplotlib afm 导入极慢
导入时间太长,真让人受不了:
from matplotlib import pylab as plt --> 3.0124739 secs
这是cProfile的输出,清楚地显示出问题出在afm.py上,这个文件是用来处理Adobe字体度量的接口。使用的Matplotlib版本是1.4.0,操作系统是Ubuntu 14.04。
5994612 function calls (5992123 primitive calls) in 4.702 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
182 1.589 0.009 2.372 0.013 afm.py:220(_parse_kern_pairs)
215 0.746 0.003 1.420 0.007 afm.py:180(_parse_char_metrics)
1297990 0.410 0.000 0.410 0.000 {method 'split' of 'str' objects}
839978 0.288 0.000 0.288 0.000 {method 'readline' of 'file' objects}
2 0.254 0.127 4.185 2.093 font_manager.py:544(createFontList)
843308 0.170 0.000 0.170 0.000 {method 'startswith' of 'str' objects}
114276 0.168 0.000 0.205 0.000 afm.py:72(_to_list_of_floats)
1563800 0.125 0.000 0.125 0.000 {len}
839220 0.117 0.000 0.117 0.000 {method 'rstrip' of 'str' objects}
115290 0.116 0.000 0.119 0.000 {method 'decode' of 'str' objects}
117775 0.086 0.000 0.086 0.000 afm.py:56(_to_int)
20 0.061 0.003 0.061 0.003 {built-in method poll}
520 0.040 0.000 0.040 0.000 {method 'get_sfnt' of 'FT2Font' objects}
6910 0.036 0.000 0.036 0.000 {posix.stat}
3372 0.025 0.000 0.038 0.000 posixpath.py:336(normpath)
有没有什么办法可以修复或者禁用它?
编辑:
把版本回退到1.3.1后,问题解决了。现在运行时间只要0.2秒。
1 个回答
18
我也遇到过同样的问题。我发现这个问题发生在你把 matplotlib
升级到新版本的时候。旧的字体缓存文件和新版本不兼容,但似乎没有被重新创建。相反,每次使用时字体列表都是动态生成的。解决办法就是删除 matplotlib 的缓存文件夹(在我的情况下是 ~/.cache/matplotlib
)。