Как полностью очистить память от всех графиков 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)