Утечка памяти в FigureCanvasTkAgg - PullRequest
0 голосов
/ 08 мая 2020

Я прошел через Matplotlib vs Tkinter: Утечка памяти с использованием FigureCanvasTkAgg , Объявление FigureCanvasTkAgg вызывает утечку памяти , Увеличение памяти с помощью matplotlib и tkinter и некоторых других другие, но у меня все еще есть проблема, хотя я не использую pyplot.

При открытии и закрытии фигур matplotlib, встроенных в кадр Tk, как показано в примере matplotlib, мое использование памяти резко увеличивается на каждой фигуре и никогда не освобождается.

Я сузил его до питания FigureCanvasTkAgg память и никогда не освобождает ее, даже когда главный кадр разрушен. В моем примере на самом деле не создается событие Tk frame, просто холст с master = None:

from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import time
import gc 

time.sleep(1)

for count in range(0,10000):

    if count % 10 == 0:
        print("Iteration %s" % count)

    figure = Figure()
    canvas = FigureCanvasTkAgg(figure, master=None)
    figure = None
    canvas = None
    gc.collect()

Запуск с memory_profiler (mprof run script.py) дает следующий результат: mprof result

Сценарий действительно вылетает, не дойдя до конца. Конечно, я не открываю даже около 10 000 фигур во время стандартной сессии с помощью своего приложения, однако я открываю и закрываю фигуры, удерживая несколько графиков с примерно 100 000 точек на каждом. Один или два раза это работает нормально, но в конечном итоге заканчивается нехватка памяти.

Я что-то здесь пропустил? Кто-нибудь знает, в чем дело, что этот холст съедает около 50 МБ каждый раз, когда вы его создаете, и никогда его не выпускаете?

Я использую python 3.8, matplotlib 3.2.0 на Windows 10. Любая помощь будет будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...