Python:在不使用GIL的情况下绘图(matplotlib)

2 投票
4 回答
774 浏览
提问于 2025-04-15 22:12

我的问题当然是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)

这段代码应该放在你导入库的最上面。

撰写回答