[gst-devel] Gst-python object cleanup

Ron McOuat rmcouat at smartt.com
Fri Oct 30 08:39:06 CET 2009


Thanks Edward, the links helped a lot. I do have a signal watch and was 
removing it in the message callback once the EOS arrived on the filesink 
element bus which was inserted in order to detect EOS. I was able to 
determine the Python object count is not increasing using some gc calls 
from the article referred to by the second link you gave me. Moving the 
application to Karmic from Jaunty and re-arranging some of the callback 
code has improved the memory use rate. The old record bin cleanup was in 
the EOS message callback and the new record bin was allocated right 
after injecting the EOS into the old record bin so there was a race 
between the two. The old and new bins had different class variable 
references bound to keep them apart so I am reasonably sure I wasn't 
stomping on the wrong things with a shared reference. I now create the 
new record bin in the EOS callback after the old one is cleaned up 
making the operations serial. There is a queue in front to accept frames 
while this is taking place so the front end doesn't lose data or block.

Watching the python process with gnome-system-monitor it seems to jump 
up about a MByte once in a while and not in a monotonic once per cycle 
way. It is like the Python arena gets fragmented somehow and so the 
virtual machine grabs a new chunk to work with - highly speculative but 
pymalloc front ends system malloc allocating large chucks. To put it in 
perspective, the stress testing cycles the application through about 2 
months of work every 24 hours of test run time, with the latest changes 
memory consumption will probably be acceptable.

BTW I would like to say thanks for gstreamer, it is a great multimedia 
processing library and is improving steadily. The Python bindings make 
it even easier to work with - I am relatively new to the language, it is 
so clean and concise - I come from Java since 2000, C, C++ since 1983 
and Fortran/Assembler since 1972.

Ron

Edward Hervey wrote:
>   The description of how you get rid of your pipelines seems correct.
>
>   There's only one other thing that *could* go wrong, is if you're using
> a signal watch on the bus, you should remove it (i.e.
> gst.Bus.remove_signal_watch()).
>
>   If you've made sure that's correct, I'd then suggest to start tracing
> the leaks at the python level. There's a couple of good articles/tools
> to do that:
>   http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks
>   http://mg.pov.lt/blog/hunting-python-memleaks
>   And you can also have a look at how debugging memory leaks is done in
> the gst-python testsuite (gst-python/tests/common.py)
>
>     Edward
>
>   
>> Thanks for any suggestion.
>>
>> Ron McOuat
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA
>> is the only developer event you need to attend this year. Jumpstart your
>> developing skills, take BlackBerry mobile applications to market and stay 
>> ahead of the curve. Join us from November 9 - 12, 2009. Register now!
>> http://p.sf.net/sfu/devconference
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>     
>
>
> ------------------------------------------------------------------------------
> Come build with us! The BlackBerry(R) Developer Conference in SF, CA
> is the only developer event you need to attend this year. Jumpstart your
> developing skills, take BlackBerry mobile applications to market and stay 
> ahead of the curve. Join us from November 9 - 12, 2009. Register now!
> http://p.sf.net/sfu/devconference
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>   




More information about the gstreamer-devel mailing list