Vous pouvez éviter les fuites de mémoire en créant et en arrêtant le processus de dessin séparément, comme indiqué ci-dessous.
from multiprocessing import Pool
import matplotlib.pyplot as plt
import numpy as np
#Méthode de traçage
# plt.clf()・ Plt.close()La mémoire est automatiquement libérée lorsque le processus se termine sans cela.
def plot(args):
x, y = args
plt.plot(x, y)
#Valeur à tracer
x = np.arange(1e7)
y = np.arange(1e7)
#Créez un processus de traçage et effectuez un traitement de dessin dedans
p = Pool(1)
p.map(plot, [[x,y]])
p.close()
Vous pouvez vérifier si la mémoire est réellement libérée avec le code suivant.
from multiprocessing import Pool
import matplotlib.pyplot as plt
import numpy as np
#Méthode de traçage
# plt.clf()・ Plt.close()La mémoire est automatiquement libérée lorsque le processus se termine sans cela.
def plot(args):
x, y = args
plt.plot(x, y)
#Vous pouvez effectuer les opérations suivantes pour vérification
plt.tight_layout()
plt.savefig('aa.jpeg')
#Tracez 10 fois pour voir si l'utilisation de la mémoire change
for i in range(10):
#Valeur à tracer
x = np.arange(1e7)
y = np.arange(1e7)
#Créez un processus de traçage et effectuez un traitement de dessin dedans
p = Pool(1)
p.map(plot, [[x,y]])
p.close()
#Afficher l'utilisation de la mémoire
import psutil
mem = psutil.virtual_memory().free / 1e9
print(i, f'memory used: {mem} [GB]')
À propos, une fuite de mémoire se produit dans les cas suivants, par exemple. (Référence: la mémoire ne peut pas être libérée uniquement par plt.close () -Qiita)
--Si vous ne faites que plt.close () '' --Si vous faites
plt.clf () →
plt.close () '', mais que vous faites plt.tight_layout () '' ou
plt.savefig () ''
Recommended Posts