我的问题当然是 GIL。当我在分析数据时,最好在两者之间展示一些图(所以等待结果不会太无聊)
但是 GIL 阻止了这一点(这让我开始问自己 Python 是否是一个好主意)。
我只能显示绘图,等到用户关闭它并在那之后开始计算。显然是浪费时间。
我已经尝试过 subprocess 和 multiprocessing 模块,但似乎无法让它们工作。
对这个有什么想法吗?谢谢
编辑:好的,所以它不是 GIL,而是 show()。
我的问题当然是 GIL。当我在分析数据时,最好在两者之间展示一些图(所以等待结果不会太无聊)
但是 GIL 阻止了这一点(这让我开始问自己 Python 是否是一个好主意)。
我只能显示绘图,等到用户关闭它并在那之后开始计算。显然是浪费时间。
我已经尝试过 subprocess 和 multiprocessing 模块,但似乎无法让它们工作。
对这个有什么想法吗?谢谢
编辑:好的,所以它不是 GIL,而是 show()。
这不是 matplotlib 或 GIL 的问题。
在 matplotlib 中,您可以根据需要打开任意数量的图形并将它们显示在屏幕上,同时您的应用程序继续执行其他操作。
您必须在交互模式下使用 matplotlib。这可能是你的问题。
from matplotlib import interactive
interactive(True)
这应该在您的导入的顶部
这与 GIL 无关,只需修改您的分析代码以使其不时更新图形(例如每 N 次迭代)。
只有这样,如果您发现绘制图形会使分析代码的速度过慢,请将图形更新代码放在具有多处理功能的子进程中。
我认为您需要将图形放入适当的窗口系统中,而不是依赖内置的显示代码。
也许将 .show() 粘贴在另一个线程中就足够了?
GIL 是无关紧要的——你有一个阻塞的 show() 调用,所以你需要先处理它。
似乎 draw() 方法可以绕过对 show() 的需求。
脚本中 .show() 的唯一原因是让它执行阻塞部分,以便在脚本结束时图像不会消失。