首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bokeh的export_png函数非常慢

Bokeh的export_png函数非常慢
EN

Stack Overflow用户
提问于 2019-12-04 15:22:51
回答 1查看 381关注 0票数 0

我有一个非常简单的Python脚本(除了最后一行之外,它基本上是即时执行的):

代码语言:javascript
复制
  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

EN

回答 1

Stack Overflow用户

发布于 2019-12-04 21:10:18

Bokeh是一个基于浏览器的绘图工具,因此为了导出到PNG,它必须:

default)

  • serialize启动一个用于无头浏览器的外部content

  • capture进程(PhantomJS ),并将Bokeh内容的JSON表示形式发送给该进程

  • 有无头浏览器进程:
  • 呈现所有Bokeh content
  • capture的屏幕快照使用webdriver
  • 将图像数据发送回Python process

创建webdriver有一些开销,这就是为什么Bokeh在第一次使用时缓存webdriver实例的原因。这就是为什么第一次出口需要更长时间,随后的出口速度更快的原因。但这里并没有任何改进的空间。关于唯一的“可调整”和可能改变的东西是webdriver的选择,例如,您可以尝试使用Chromedriver或Geckodriver。(事实上,开放的PR可以切换到Geckodriver作为默认的,因为PhantomJS是不推荐的,不再维护。)但是,我并不确定这两种方法中的任何一种实际上都比PhantomJS快。

所有这些,我个人还没有经历10秒,即使是第一次渲染。作为参考,上面的代码在一个相当老的Macbook上使用了1.7秒的第一次呈现和300 As的后期呈现:

代码语言:javascript
复制
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包是最新的,它们可能已经在某种程度上进行了改进,并且更新它会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59179308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档