我有一个非常简单的Python脚本(除了最后一行之外,它基本上是即时执行的):
from bokeh.plotting import figure
from bokeh.io import export_png
x_labels = ['AAA','BBB','CCC']
y_values = [5,7,2]
p = figure(title='test', x_range=x_labels, plot_height=300, plot_width=500)
c = p.vbar(x=x_labels, top=y_values, width=0.15, line_color=None)
export_png(p, filename=r'C:\MyImage.png') # <--- takes very long使用export_png的最后一行需要5-10秒.重新运行最后一行是更快的第二次循环(~1-2秒).所以看起来它“热身”了。,但是我能做些什么来加快速度吗,或者这是一个已知的“特性”?
我在所有最近的bokeh版本(1.0.2、1.2.0、1.4.0)上都尝试过这一点,但都得到了相同的结果。我的PhantomJS在2.1.1版本上,它的路径os.environ.get('BOKEH_PHANTOMJS_PATH')根据需要设置为C:\\Users\\USERNAME\\AppData\\Roaming\\npm\\node_modules\\phantomjs-prebuilt\\lib\\phantom\\bin\\phantomjs.exe。
发布于 2019-12-04 21:10:18
Bokeh是一个基于浏览器的绘图工具,因此为了导出到PNG,它必须:
default)
创建webdriver有一些开销,这就是为什么Bokeh在第一次使用时缓存webdriver实例的原因。这就是为什么第一次出口需要更长时间,随后的出口速度更快的原因。但这里并没有任何改进的空间。关于唯一的“可调整”和可能改变的东西是webdriver的选择,例如,您可以尝试使用Chromedriver或Geckodriver。(事实上,开放的PR可以切换到Geckodriver作为默认的,因为PhantomJS是不推荐的,不再维护。)但是,我并不确定这两种方法中的任何一种实际上都比PhantomJS快。
所有这些,我个人还没有经历10秒,即使是第一次渲染。作为参考,上面的代码在一个相当老的Macbook上使用了1.7秒的第一次呈现和300 As的后期呈现:
In [8]: %time export_png(p, filename=r'C:\MyImage.png')
CPU times: user 107 ms, sys: 38.7 ms, total: 146 ms
Wall time: 1.69 s
In [9]: %time export_png(p, filename=r'C:\MyImage.png')
CPU times: user 74.6 ms, sys: 9.2 ms, total: 83.8 ms
Wall time: 319 ms
Out[9]: '/Users/bryan/tmp/C:\\MyImage.png'我想可能存在平台差异,在Windows上启动进程的开销可能更高?您可以考虑的另一个途径是确保您的Selenium包是最新的,它们可能已经在某种程度上进行了改进,并且更新它会有所帮助。
https://stackoverflow.com/questions/59179308
复制相似问题