[PyQt] Lambdas, Closures and Garbage Collection

charles matthew chen charles.chen at temboo.com
Tue Sep 2 19:30:20 BST 2008


Hi Phil,

   The documented behavior of sip/pyqt - to keep strong references to 
slots except instance methods - isn't desirable from our project's point 
of view.  Is there any easy way to patch SIP to disable this behavior?  
We'd like closures, lambdas, etc. to be garbage collected if no other 
strong reference remains to them.

Thanks,
   Charles

from http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#pyqt-slots-and-qt-slots

Note that when a slot is a Python callable its reference count is not 
increased. This means that a class instance can be deleted without 
having to explicitly disconnect any signals connected to its methods. 
However, if a slot is a lambda function or a partial function then its 
reference count is automatically incremented to prevent it from being 
immediately garbage collected.


from http://www.riverbankcomputing.co.uk/static/Downloads/sip4/ChangeLog

2007/07/14 15:31:37  phil
Rather than only lambda functions being given an extra reference when used as a
slot, anything other that a method or wrapped C function is given an extra
reference.  Specifically this means that partial functions can now be used as
slots.

2007/02/18 16:00:12  phil

Fixed a bug in the clearing of reference cycles with lambda slots.  Although
the slot is visited, it is no longer cleared - that is left to the proxy dtor.

2007/01/21 16:32:45  phil
Extended the cyclic garbage collector support for lambda slots so it works with
SIGNALs as well as PYSIGNALs.
Incremented the SIP API version number to 3.4.

2007/01/21 14:55:47  phil
Fixed garbage collection support for lambda slots (at the moment only when the
slot is connected to a PYSIGNAL).




More information about the PyQt mailing list