On 1/15/2024 9:47 PM, Akkana Peck via Python-list wrote:
I wrote:
Also be warned that some modules (particularly if they're based on libraries
not written in Python) might not garbage collect, so you may need to use other
methods of cleaning up after those objects.
Chris Angelico writes:
Got any examples of that?
The big one for me was gdk-pixbuf, part of GTK. When you do something like
gtk.gdk.pixbuf_new_from_file(), there's a Python object that gets created, but
there's also the underlying C code that allocates memory for the pixbuf. When
the object went out of scope, the Python object was automatically garbage
collected, but the pixbuf data leaked.
This kind of thing can happen with PyQt, also. There are ways to
minimize it but I don't know if you can ever be sure all Qt C++ objects
will get deleted. It depends on the type of object and the circumstances.
Calling gc.collect() caused the pixbuf data to be garbage collected too.
There used to be a post explaining this on the pygtk mailing list: the link was
http://www.daa.com.au/pipermail/pygtk/2003-December/006499.html
but that page is gone now and I can't seem to find any other archives of that
list (it's not on archive.org either). And this was from GTK2; I never checked
whether the extra gc.collect() is still necessary in GTK3, but I figure leaving
it in doesn't hurt anything. I use pixbufs in a tiled map application, so there
are a lot of small pixbufs being repeatedly read and then deallocated.
...Akkana
--
https://mail.python.org/mailman/listinfo/python-list