Juk*_*ela 8 python pdf-generation matplotlib
我想用matplotlib生成一些PDF文件.我的主要问题是matplotlib很慢,每个文件的顺序为0.5秒.
我试图弄清楚为什么需要这么长时间,我编写了以下测试程序,它只是将一条非常简单的曲线绘制为PDF文件:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
X = range(10)
Y = [ x**2 for x in X ]
for n in range(100):
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)
ax.plot(X, Y)
fig.savefig("test.pdf")
Run Code Online (Sandbox Code Playgroud)
但即使是这样简单的事情也需要花费大量时间:100个PDF文件共计15-20秒(现代英特尔平台,我尝试过Mac OS X和Linux系统).
有没有什么技巧和技巧可以用来加速matplotlib中的PDF生成?显然我可以在多核平台上使用多个并行线程,但还有什么我可以做的吗?
如果可行的话,您可以使用多进程来执行此操作(假设您的计算机上有多个内核):
注意:以下代码将在您计算机上的当前目录中生成 40 个 pdf 文件
import matplotlib.pyplot as plt
import multiprocessing
def do_plot(y_pos):
fig = plt.figure()
ax = plt.axes()
ax.axhline(y_pos)
fig.savefig('%s.pdf' % y_pos)
pool = multiprocessing.Pool()
for i in xrange(40):
pool.apply_async(do_plot, [i])
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
它无法完美扩展,但通过在 4 个核心(带超标题的双核)上执行此操作,我获得了显着的提升:
$> time python multi_pool_1.py
done
real 0m5.218s
user 0m4.901s
sys 0m0.205s
$> time python multi_pool_n.py
done
real 0m2.935s
user 0m9.022s
sys 0m0.420s
Run Code Online (Sandbox Code Playgroud)
我确信 mpl 的 pdf 后端的性能改进还有很大的空间,但这不在您所追求的时间范围内。
哈特哈,
归档时间: |
|
查看次数: |
3983 次 |
最近记录: |