2015-11-22 2 views
2

Если я запускаю следующий кодRelease в Spyder IDE

import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 
import scipy.misc 
import gc 

def plot(i): 
    lena = scipy.misc.lena() 
    fig = plt.figure(frameon=False,figsize=(2.,2.),dpi=256) 
    ax = fig.add_axes([0, 0, 1, 1]) 
    ax.axis('off') 
    ax.imshow(lena, cmap=plt.cm.gray) 
    filename = '/tmp/test_{:03d}.png'.format(i) 
    with open(filename, 'w') as outfile: 
    fig.canvas.print_png(outfile) 
    plt.close(fig) 
    del fig 
    gc.collect() 

for i in range(100): 
    plot(i) 
    print(i) 

в Spyder (версия 2.3.5.2 на Gentoo Linux с питоном 2.7.10, IPython 3.2.1), я вижу, линейное увеличение память с номером итерации i до тех пор, пока у меня не закончится память. «Запуск в Spyder» означает маркировку текста и нажатие F9. Однако, если я запускаю его на отдельном терминале IPython, потребление памяти остается постоянным.

Есть ли способ принудительно освободить память в Spyder после заливки с помощью matplotlib, в частности, когда выход пошел в файл, а не на внутренний IP-терминал Spyder?

+0

(* Spyder dev здесь *) Что произойдет, если вы запустите этот код в IPython * qtconsole * вместо простого терминала? Вы видите такое же увеличение памяти или нет? –

+0

Нет, нет увеличения памяти при использовании Qtconsole IPython. Одно замечание, которое я заметил, это то, что процесс Spyder отображается с параметром «-u» в моем списке процессов, в то время как IPython этого не делает. Также обратите внимание, что не имеет значения, если я запустил код в Spyder в терминале python или IPython, или если я запустил его с F9 или F5. – Felix

+0

Протестировано снова с Spyder 2.3.8, IPython 4.0.1 и matplotlib 1.5. Проблема сохраняется. – Felix

ответ

1

Я столкнулся с подобной проблемой при построении 1000 участков. Перед закрытием сюжета я использовал команду plt.show(). Затем я использовал plt.close() и сбор мусора и т. Д. Это значительно минимизировало утечку памяти. Хотя я не знаю точно, я нашел plt.show(), чтобы справиться с проблемой памяти для меня.

Смежные вопросы