Я обнаружил значительную утечку памяти в моем коде из-за создания фигур matplotlib. Кажется, когда создается figure
, он не освобождается из памяти. После создания нескольких фигур эта утечка будет постепенно увеличиваться, пока моя система не выйдет из строя. Моя система:
python 2.7.17
matplotlib 2.2.3
Вот пример того, как я пытаюсь закрыть рисунок, удалить ссылку и собрать мусор
import matplotlib.pyplot as plt
import gc
import os
import psutil
# Memory of process before plot created
process = psutil.Process(os.getpid())
print(process.memory_info().rss)/1.e+9 # in GB
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# Memory of process after plot created
process = psutil.Process(os.getpid())
print(process.memory_info().rss)/1.e+9
# Close figure, delete reference, collect garbage
plt.clf()
plt.close(fig)
del fig
gc.collect()
# Memory after attempting to remove reference and collect garbage
process = psutil.Process(os.getpid())
print(process.memory_info().rss)/1.e+9
Я также попробовал `plt.close ( 'all'), но это также не работает.
- До создания графика: 0,056569856 (ГБ)
- После создания графика: 0,069013504 (ГБ)
- После сборка мусора: 0.069451776 (ГБ)
На самом деле память вызывается увеличение после вызова gc.collect()
. Я не очень понимаю, что здесь происходит. Эта проблема поднималась несколько раз, однако ни одно из этих решений не решает проблему:
Буду признателен за любую помощь.