Hi Mike,
ion(), ioff() are useful to get immediate feedback when developing a script,
when it is fully debugged I then increase the number of iterations and leave it
running over the weekend. At that point I could obviously also have removed
ion(), ioff() but given that I had no idea that this was necessary my sim
crashed and I lost a weekend's worth of sim time. Anyway, whether or not
ion(),ioff() are needed in this particular script is really besides the point.
If the script, however unusual, is revealing a bug in matplotlib it should be
logged so that it can hopefully be fixed.
Oisín
From: Michael Droettboom [mailto:md...@stsci.edu]
Sent: 14 October 2013 18:13
To: matplotlib-users@lists.sourceforge.net
Subject: Re: [Matplotlib-users] Memory leak when using pyplot.ion() ?
I haven't had a chance to look into where the memory is actually leaking,
ion/ioff are intended for interactive use, and here you are saving a large
number of plots to files. Why do you need ion at all?
Mike
On 10/14/2013 08:51 AM, OCuanachain, Oisin (Oisin) wrote:
Hi,
I am having problems with a script. It runs a number of iterations and plots
and saves a number of plots on each iteration. After the plots have been saved
I issue the pyplot.close('all') command so despite many plots being created
only 4 should be open at any given time which should not cause any memory
problems. When I run the script however I see the RAM usage gradually growing
without bound and eventually causing the script to crash. Interestingly I have
found if I comment out the pyplot.ion() and pyplot.ioff() the problem
vanishes. So I do have a workaround but it would still be good to have this
fixed in case I forget about it in future and loose another weekend's work.
My OS is Windows XP Service Pack 3
Python 2.6
Matplotlib 1.0.1
The code below is a stripped down version of my script which still exhibits the
problem.
Oisín.
# -*- coding: utf-8 -*-
import sys
import time
import numpy as np
from matplotlib import pyplot
import os
# Main script body
try:
for gain in range(1,20,2):
for PortToTest in range(8):
dirname = '.\crash'
f = open(dirname + '\\results.m','w')
runname = '\P' + str(PortToTest) + str(gain) + \
'_' + time.strftime('d%dh%Hm%Ms%S')
dirname = dirname + runname
os.mkdir(dirname)
os.system('copy ' + sys.argv[0] + ' ' + dirname )
nIts = 50
# Decimate data for plotting if many iterations are run
if(nIts10):
echoPlotDec = 10
else:
echoPlotDec = 1
ResidN = np.zeros((4,2*nIts))
MaxSl= np.zeros((4,2*nIts))
MaxOld = np.zeros((4,2*nIts))
MaxNew = np.zeros((4,2*nIts))
EchoA= np.zeros((2*nIts,160))
for kk in range(2*nIts):
ResidN[0,kk] = np.random.rand(1,1)
ResidN[1,kk] = np.random.rand(1,1)
ResidN[2,kk] = np.random.rand(1,1)
ResidN[3,kk] = np.random.rand(1,1)
MaxSl[0,kk] = np.random.rand(1,1)
MaxSl[1,kk] = np.random.rand(1,1)
MaxSl[2,kk] = np.random.rand(1,1)
MaxSl[3,kk] = np.random.rand(1,1)
MaxOld[0,kk] = np.random.rand(1,1)
MaxOld[1,kk] = np.random.rand(1,1)
MaxOld[2,kk] = np.random.rand(1,1)
MaxOld[3,kk] = np.random.rand(1,1)
MaxNew[0,kk] = np.random.rand(1,1)
MaxNew[1,kk] = np.random.rand(1,1)
MaxNew[2,kk] = np.random.rand(1,1)
MaxNew[3,kk] = np.random.rand(1,1)
EchoA[kk,:] = np.random.rand(1,160)
f.close()
pyplot.ion()
pyplot.figure()
pyplot.hold(True)
LegendTexts = (A,B,C,D)
pyplot.title(R ( + runname +))
pyplot.xlabel(Index)
pyplot.ylabel(Noise (dB))
pyplot.grid(True)
pyplot.hold(True)
pyplot.plot(np.transpose(ResidN),'.-')
pyplot.legend(LegendTexts,loc=1)
pyplot.axis([0, 2*nIts, -33, -25])
pyplot.savefig(dirname + '\\results.emf',format='emf')
pyplot.figure()
pyplot.hold(True)
pyplot.title(Coefs)
pyplot.xlabel(Coef Index)
pyplot.ylabel(Coef Value)
pyplot.grid(True)
pyplot.hold(True)
pyplot.plot(np.transpose(EchoA[0:nIts-1:echoPlotDec,:]),'.-')
pyplot.plot(np.transpose(EchoA[nIts:2*nIts-1:echoPlotDec,:]),'*-')
pyplot.axis([0, 160, -0.5, 2])
pyplot.savefig(dirname + '\\CoefsA.emf',format='emf')
pyplot.figure()
pyplot.hold(True)
pyplot.title(MaxAbs, Old = '.', New = '*' )
pyplot.xlabel(Iteration)
pyplot.ylabel(o/p (LSBs))
pyplot.grid(True)
pyplot.hold(True)
pyplot.plot(np.transpose(MaxOld),'.-')
pyplot.plot(np.transpose(MaxNew),'*-')
pyplot.axis([0, 2*nIts, 32, 128])
pyplot.savefig(dirname + '\\MaxAbsA.emf',format='emf')