[Numpy-discussion] Re: Garbage collection fails after numarray exception
Todd Miller
jmiller at stsci.edu
Sun Feb 29 05:51:01 EST 2004
On Sun, 2004-02-29 at 04:28, Leo Breebaart wrote:
> Rob Hooft <rob at hooft.net> writes:
>
> > > On Tue, 2004-02-10 at 15:09, Leo Breebaart wrote:
> > >
> > >> >>> import numarray
> > >> >>> a = numarray.zeros(100000000)
> > >> >>> del a
> > >> >>> a = numarray.zeros(100000000)
> > >> >>> a + ''
> > >> Traceback (most recent call last):
> > >> File "<stdin>", line 1, in ?
> > >> File "/usr/lib/python2.3/site-packages/numarray/numarraycore.py", line 664, in __add__
> > >> return ufunc.add(self, operand)
> > >> File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 870, in _cache_miss2
> > >> (in1, in2), insig, scalar = _inputcheck(n1, n2)
> > >> File "/usr/lib/python2.3/site-packages/numarray/ufunc.py", line 391, in _inputcheck raise TypeError(
> > >> TypeError: UFunc arguments must be numarray, scalars or numeric sequences
> > >> >>> del a
> > >> >>>
> > >>
> > >> If I execute these statements alongside 'top' or another
> > >> memory monitor, I of course see a big memory increase after
> > >> each call to 'zeros', as well as a big decrease after the
> > >> first 'del a' -- but no change whatsoever any more after the
> > >> second 'del a', not even if I explicitly call the garbage
> > >> collector via the gc module. [...]
> >
> > Hmm.... Isn't this the standard python thing that it keeps the
> > context of the last exception somewhere for queries? Just
This is a good point, something I rediscovered for myself a couple weeks
ago: since Python holds onto the context at the point of an exception,
it will keep arrays alive in the exception context.
> > generate another exception and you should see that the memory
> > taken by a is liberated because the indirect reference from
> > sys.exc_traceback to a disappears.
>
> Well, I've tried to test this, but even after multiple subsequent
> exceptions the memory taken up by the numarrays is not freed, at
> least not on my machine and with Python 2.3.3. Does it work for
> you if you try running the above code and then generating an
> exception?
But... I looked into this some more and found that there were errors in
the exception handling for ufuncs which resulted in leaked memory.
Regards,
Todd
--
Todd Miller <jmiller at stsci.edu>
More information about the NumPy-Discussion
mailing list