On 2010-07-14 19:11:58 +0200, K.-Michael Aye said:

> On 2010-07-14 18:51:26 +0200, K.-Michael Aye said:
> 
>> On 2010-07-14 18:45:35 +0200, John Hunter said:
>> 
>>> On Wed, Jul 14, 2010 at 11:38 AM, K.-Michael Aye
>>> <kmichael....@gmail.com> wrote:
>>> 
>>>> Out[12]: 1
>>>> 
>>>> In [13]: gc.collect()
>>>> 
>>>> Out[13]: 12
>>> 
>>> 
>>> still not seeing a leak in your data -- you need to report_memory
>>> after calling gc collect.  Turn off hold, add an image, call collect,
>>> report memory, the repeat several times, each time calling collect and
>>> report memory, and report the results.
>> 
>> Was just following your example, you were nowhere calling collect.
>> Here is what you requested:
>> 
>> In [1]: import gc
>> 
>> In [2]: import matplotlib.cbook as cbook
>> 
>> In [3]: data = ones((1500,1500,3))
>> 
>> In [4]: hold(False)
>> 
>> In [5]: imshow(data)
>> 
>> Out[5]: <matplotlib.image.AxesImage object at 0x1c43e50>
>> 
>> In [6]: gc.collect()
>> 
>> Out[6]: 12
>> 
>> In [7]: cbook.report_memory()
>> 
>> Out[7]: 174540
>> 
>> In [8]: imshow(data)
>> 
>> Out[8]: <matplotlib.image.AxesImage object at 0x1c59e90>
>> 
>> In [9]: gc.collect()
>> 
>> Out[9]: 0
>> 
>> In [10]: cbook.report_memory()
>> 
>> Out[10]: 253400
>> 
>> In [11]: imshow(data)
>> 
>> Out[11]: <matplotlib.image.AxesImage object at 0x1c603b0>
>> 
>> In [12]: gc.collect()
>> 
>> Out[12]: 0
>> 
>> In [13]: cbook.report_memory()
>> 
>> Out[13]: 333360
>> 
>> In [14]: imshow(data)
>> 
>> Out[14]: <matplotlib.image.AxesImage object at 0x1c60410>
>> 
>> In [15]: gc.collect()
>> 
>> Out[15]: 0
>> 
>> In [16]: cbook.report_memory()
>> 
>> Out[16]: 413296
>> 
> 
> 
> Here are the commands as macro form, for easy cut and paste into pylab:
> 
> import gc
> import matplotlib.cbook as cbook
> data = ones((1500,1500,3))
> hold(False)
> imshow(data)
> gc.collect()
> cbook.report_memory()
> imshow(data)
> gc.collect()
> cbook.report_memory()
> imshow(data)
> gc.collect()
> cbook.report_memory()
> imshow(data)
> gc.collect()
> cbook.report_memory()

Furthermore,
deleting images from ax.images does not free memory :

In [1]: import gc

In [2]: import matplotlib.cbook as cbook

In [3]: data = ones((1500,1500,3))

In [4]: imshow data
------> imshow(data)

Out[4]: <matplotlib.image.AxesImage object at 0x1c57550>

In [5]: imshow data
------> imshow(data)

Out[5]: <matplotlib.image.AxesImage object at 0x1c442b0>

In [6]: imshow data
------> imshow(data)

Out[6]: <matplotlib.image.AxesImage object at 0x1400cd0>

In [7]: imshow data
------> imshow(data)

Out[7]: <matplotlib.image.AxesImage object at 0x1414cb0>

In [8]: ax =gca()

In [9]: ax.images

Out[9]:
[<matplotlib.image.AxesImage object at 0x1c57550>,
 <matplotlib.image.AxesImage object at 0x1c442b0>,
 <matplotlib.image.AxesImage object at 0x1400cd0>,
 <matplotlib.image.AxesImage object at 0x1414cb0>]

In [10]: gc.collect()

Out[10]: 15

In [11]: cbook.report_memory()

Out[11]: 414588

In [12]: del ax.images[:-1]

In [13]: gc.collect()

Out[13]: 3

In [14]: cbook.report_memory()

Out[14]: 414600




------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to