🐈

matplotlib でグラフのメモリを都度解放する

2024/03/31に公開

matplotlib でグラフのメモリを都度解放する

https://qiita.com/Masahiro_T/items/bdd0482a8efd84cdd270 の説明を参考にして
plt.subplots を使う場合の応用

import matplotlib.pyplot as plt
import numpy as np
import psutil

num = 1000
mem_ary = np.empty(0)

for i in range(num):
    # メモリサイズが大きいグラフを描画
    x = np.arange(1e7)
    y = np.arange(1e7)
    fig, ax = plt.subplots()
    ax.plot(x, y)

    fig.clear()
    plt.close(fig)

    # メモリ使用量を記録
    mem = psutil.virtual_memory().used / 1e9
    mem = round(mem, 1)
    mem_ary = np.append(mem_ary, mem)
    print(f"{i}: {mem}")

x = np.arange(num)
print(mem_ary)
plt.plot(x, mem_ary)
print("showing...")
plt.show()
print("showed")

結果

1000 回 plot したときの使用メモリ推移

参考リンク

https://qiita.com/Masahiro_T/items/bdd0482a8efd84cdd270
https://github.com/matplotlib/matplotlib/issues/20300
https://stackoverflow.com/questions/28757348/how-to-clear-memory-completely-of-all-matplotlib-plots

Discussion