LINUX.ORG.RU

как правильно освободить память?

 ,


0

2

есть некоторый цикл:

for i in arange(a,b):
    DATA=loadtxt(name+'/plt'+str(i)+'.txt',dtype=float,unpack=True,skiprows=1)
    na=DATA[0];ne=DATA[1];ni=DATA[2]
    plot(na);plot(ni);plot(ne)
    ...
    savefig( imgdir+'/'+name+'/'+'plt'+str(i)+'('+str(T[i-a]*1e6)+'µs)'+filext )
с каждой итерацией цикл захавывает всё больше памяти и не отдаёт её системе. как же её нормально освободить?

пробовал выносить итерацию в отдельную функцию и делать через mutiprocessing, как советуют в интернетах, но память всё равно не возвращается.

★★★★★

Последнее исправление: thunar (всего исправлений: 2)

Попробуй в отдельную функцию и потом делай gc.collect. Хотя не уверен что поможет.

pi11 ★★★★★
()

с каждой итерацией цикл захавывает всё больше памяти и не отдаёт её системе

Это вполне может быть штатным поведением. Если вот прям-таки необходимо освобождать память, вынеси итерацию в отдельный вызов python.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous
#!/usr/bin/python
#coding=utf-8
from pylab import *
from scipy import *
import matplotlib.pyplot as plt
import string
import os

a=0;b=10000;x=arange(0,100,0.01)
for i in xrange(a,b,1):
	figure()
	DATA=sin(x)
	plot(x,DATA,'-k')
	savefig('/tmp/'+str(i)+'.png');print  ('saved /tmp/'+str(i)+'.png')

память жрут функции matplotlib'a

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

А, ну всё правильно же. Ты плодишь фигур много, которые висят в памяти. Их надо закрывать, то есть plt.close() в конце каждой итерации цикла делать после plt.savefig().

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.