PyDispatcher question
Mike C. Fletcher
mcfletch at vrplumber.com
Thu Apr 5 14:08:47 EDT 2007
Jorgen Bodde wrote:
> Hi all,
>
> Hopefully someone can help me. I am fairly new to Python, and I am
> looking into PyDispatcher. I am familiar with the C++ sigslot variant,
> and I wonder how similar PyDispatches is. I run in to the following
> 'problem' (pseudo code, untested here)
>
Here's some real code...
from pydispatch import dispatcher
import gc
class X(object):
def __init__( self ):
dispatcher.connect( self.someSignal, signal=1 )
def someSignal( self ):
print 'hello world'
obj = X()
dispatcher.send( signal= 1 )
del obj
#gc.collect()
dispatcher.send( signal= 1 )
This will print out only one "hello world" on my Python 2.5 Gentoo
machine (it should work the same on any recent Python). Basically your
python shell will tend to keep around an extra copy of the X instance
until you get rid of it explicitly, and that's what keeps the object
"live" and receiving signals if you try the code in the shell.
PyDispatcher is designed so that, by default, when the object goes away
the registration is removed. It uses the weakref module to do this,
rather than __del__ methods, to avoid garbage cycles, btw.
HTH,
Mike
--
________________________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://www.vrplumber.com
http://blog.vrplumber.com
More information about the Python-list
mailing list