Python:在不使用GIL的情况下绘图(matplotlib)
我的问题当然是GIL(全局解释器锁)。在我分析数据的时候,如果能中间展示一些图表,那就不会觉得等待结果太无聊了。
但是GIL阻止了这一点(这让我开始怀疑Python当初是不是个好选择)。
我只能先显示图表,等用户关闭图表后才能继续计算。这显然是在浪费时间。
我已经尝试过subprocess和multiprocessing模块,但似乎都没法正常工作。
对此有什么想法吗?谢谢!
补充:好的,其实不是GIL的问题,而是show()的问题。
4 个回答
3
这和全局解释器锁(GIL)没关系,只需要修改你的分析代码,让它定期更新图表(比如每隔N次迭代更新一次)。
只有在你发现绘制图表让分析代码变得太慢的时候,才把更新图表的代码放到一个单独的进程中去处理,这样可以利用多进程。
3
我觉得你需要把图形放到一个合适的窗口系统里,而不是依赖内置的显示代码。
也许把 .show() 放到另一个线程里就可以解决问题了?
全局解释锁(GIL)在这里没什么关系——你现在有一个阻塞的 show() 调用,所以你需要先处理这个问题。
6
这不是matplotlib或者全局解释器锁(GIL)的问题。
在matplotlib中,你可以打开任意数量的图形窗口,并且在屏幕上显示它们,同时你的应用程序可以继续做其他事情。
你需要在交互模式下使用matplotlib。这可能就是你遇到的问题。
from matplotlib import interactive
interactive(True)
这段代码应该放在你导入库的最上面。