Matplotlib plt.close () не закрывает фигуру и память не может быть освобождена - PullRequest
0 голосов
/ 17 апреля 2020

Я обнаружил значительную утечку памяти в моем коде из-за создания фигур 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(). Я не очень понимаю, что здесь происходит. Эта проблема поднималась несколько раз, однако ни одно из этих решений не решает проблему:

Буду признателен за любую помощь.

...