On 07/16/2010 01:32 AM, K.-Michael Aye wrote:
> 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 :

Maybe because ipython is keeping a reference to every AxesImage object 
that you make...

Eric

>
> 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