Если я запускаю следующий код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?
(* Spyder dev здесь *) Что произойдет, если вы запустите этот код в IPython * qtconsole * вместо простого терминала? Вы видите такое же увеличение памяти или нет? –
Нет, нет увеличения памяти при использовании Qtconsole IPython. Одно замечание, которое я заметил, это то, что процесс Spyder отображается с параметром «-u» в моем списке процессов, в то время как IPython этого не делает. Также обратите внимание, что не имеет значения, если я запустил код в Spyder в терминале python или IPython, или если я запустил его с F9 или F5. – Felix
Протестировано снова с Spyder 2.3.8, IPython 4.0.1 и matplotlib 1.5. Проблема сохраняется. – Felix