我很难弄清楚为什么FigureCanvasTkAgg的声明会导致内存泄漏,我在我的类__init__
方法中有以下几行:
# pndwinBottom is a paned window of the main screen
self.__drawplotFrame = Frame(pndwinBottom, width=WIDTH, height=HEIGHT) # the frame on which we will add our canvas for drawing etc.
self.__fig = plt.figure(figsize=(16,11))
self.__drawplotCanvas = FigureCanvasTkAgg(self.__fig, master=self.__drawplotFrame)
问题是,在运行我的应用程序,并退出,python32.exe仍然在我的进程窗口,并会堵塞我的计算机.注解出这三行,但将允许我的应用程序退出,该进程将正确终止.这些行可以做什么,我的应用程序,防止该进程结束后,应用程序完成?谢谢
- 编辑 *
内存泄漏似乎是由self.__fig = plt.figure(figsize=(16, 11))
这行代码引起的。在退出之前,我需要用plt做一些解构吗?
3条答案
按热度按时间plicqrtu1#
我遇到了内存泄漏的问题,我想我找到了一个解决方案。在我的__init__方法中,我创建了一个框架,然后将其传递给绘图函数来完成实际工作。在该函数中,我将创建一个新的matplotlib.figure.Figure示例,由于某种原因,当函数超出范围时,该示例没有被销毁。
为了解决这个问题,我这样做了:在__init__方法中,我不仅创建了框架,还创建了图形(包括轴)和画布:
然后,在绘图方法中,
就这样,漏洞消失了!
hs1ihplo2#
我猜这是因为当Tkinter窗口关闭时pyplot图形没有被破坏。
就像在embedding in tk example中一样,尝试使用
Figure
:示例用途:
kcugc4gi3#
为用户提供的侧标,对于这些用户,所提供的解决方案不起作用:
在第二代
gc.collect(2)
的垃圾收集器的帮助下,对丢失对象的引用被删除。这为我解决了
FigureCanvasTkAgg()
的几个问题。垃圾收集器可以通过以下方式导入和使用: