Как полностью очистить память от всех графиков Matplotlib

У меня есть модуль анализа данных, который содержит функции, которые вызывают API-интерфейс MPplotlib несколько раз, чтобы генерировать до 30 цифр в каждом прогоне. Эти цифры сразу же записываются на диск после их создания, поэтому мне нужно очистить их из памяти. В настоящее время, в конце каждой из моих функций, я делаю

import matplotlib.pyplot as plt

plt.clf()

однако я не уверен, действительно ли этот оператор может очистить память. Я особенно обеспокоен, так как вижу, что каждый раз, когда я запускаю свой модуль для отладки, свободное пространство памяти уменьшается. Может ли кто-нибудь рассказать мне о том, что мне нужно сделать, чтобы действительно очистить память каждый раз после того, как я написал графики на диск?

Спасибо.

Ответ 1

Особенно, когда вы запускаете несколько процессов или потоков, гораздо лучше определить переменную figure и работать с ней напрямую:

from matplotlib import pyplot as plt

f = plt.figure()
f.clear()
plt.close(f)

В любом случае вы должны сочетать использование plt.clear() и plt.close()

Ответ 2

  У меня есть модуль анализа данных, который содержит функции, которые вызывают Matplotlib Pyplot API несколько

Можете ли вы редактировать свои функции, вызывающие matplotlib? Я столкнулся с той же проблемой, я попытался выполнить следующую команду, но ничего из этого не сработало.

plt.close(fig)
fig.clf()
gc.collect()
%reset_selective -f fig

Тогда у меня сработал один трюк, вместо того, чтобы каждый раз создавать новую фигуру, я передаю один и тот же объект fig в функцию, и это решило мою проблему.

например, используйте

fig = plt.figure()
for i in range(100):
    plt.plot(x,y)

вместо

for i in range(100):
    fig = plt.figure()
    plt.plot(x,y)