Sie können Speicherverluste verhindern, indem Sie den Zeichenvorgang wie unten gezeigt separat erstellen und beenden.
from multiprocessing import Pool
import matplotlib.pyplot as plt
import numpy as np
#Methode zum Plotten
# plt.clf()・ Plt.close()Der Speicher wird automatisch freigegeben, wenn der Vorgang ohne dies beendet wird.
def plot(args):
x, y = args
plt.plot(x, y)
#Wert zum Plotten
x = np.arange(1e7)
y = np.arange(1e7)
#Erstellen Sie einen Prozess zum Plotten und führen Sie darin eine Zeichnungsverarbeitung durch
p = Pool(1)
p.map(plot, [[x,y]])
p.close()
Mit dem folgenden Code können Sie überprüfen, ob der Speicher tatsächlich freigegeben ist.
from multiprocessing import Pool
import matplotlib.pyplot as plt
import numpy as np
#Methode zum Plotten
# plt.clf()・ Plt.close()Der Speicher wird automatisch freigegeben, wenn der Vorgang ohne dies beendet wird.
def plot(args):
x, y = args
plt.plot(x, y)
#Sie können zur Überprüfung Folgendes tun
plt.tight_layout()
plt.savefig('aa.jpeg')
#Zeichnen Sie 10 Mal, um festzustellen, ob sich die Speichernutzung ändert
for i in range(10):
#Wert zum Plotten
x = np.arange(1e7)
y = np.arange(1e7)
#Erstellen Sie einen Prozess zum Plotten und führen Sie darin eine Zeichnungsverarbeitung durch
p = Pool(1)
p.map(plot, [[x,y]])
p.close()
#Speichernutzung anzeigen
import psutil
mem = psutil.virtual_memory().free / 1e9
print(i, f'memory used: {mem} [GB]')
Übrigens tritt beispielsweise in den folgenden Fällen ein Speicherverlust auf. (Referenz: Der Speicher wird möglicherweise nicht nur von [plt.close () -Qiita] freigegeben (https://qiita.com/Masahiro_T/items/bdd0482a8efd84cdd270))
plt.close ()
tun
--Wenn Sie plt.clf ()
→ plt.close ()
ausführen, aber plt.tight_layout ()
oder plt.savefig ()