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(nIts>10):
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')
pyplot.figure()
pyplot.hold(True)
pyplot.title("MaxAbs")
pyplot.xlabel("Iteration")
pyplot.ylabel("(LSBs)")
pyplot.grid(True)
pyplot.hold(True)
pyplot.plot(np.transpose(MaxSl),'.-')
pyplot.axis([0, 2*nIts, 0, 64])
pyplot.savefig(dirname + '\\MaxAbsSl.emf',format='emf')
pyplot.close('all')
except RuntimeError, msg:
print 'Exception occurred in main script body'
print >>sys.stderr, msg
raise
finally:
print "Test done"
# Display plots
pyplot.ioff()
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net<mailto:Matplotlib-users@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
--
_
|\/|o _|_ _. _ | | \.__ __|__|_|_ _ _ ._ _
| ||(_| |(_|(/_| |_/|(_)(/_|_ |_|_)(_)(_)| | |
http://www.droettboom.com
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users