PyDispatcher question

Jorgen Bodde jorgen.maillist at gmail.com
Thu Apr 5 20:35:11 CEST 2007


Hi Mike,

Thanks for the explanation! The Python shell really threw me off here.
I thought it would work exactly the same as in the interpreter itself.
:-)

Even assigning None to the object exibits the same behaviour as "del"
does. COOL!

This is what I did sofar:

from pydispatch import dispatcher

class X(object):
  def __init__(self):
    dispatcher.connect(self.someSignal, signal = 1)
  def someSignal(self):
    print 'Hello world'

a = X()
dispatcher.send(1)

a = None

dispatcher.send(1)

print '----------------------'

b = X()
c = X()
dispatcher.send(1)

With as output;

C:\Documents and Settings\Jorg\Desktop>python New1.py
Hello world
----------------------
Hello world
Hello world

Nice! Thanks a lot for the info!

- Jorgen


On 4/5/07, Mike C. Fletcher <mcfletch at vrplumber.com> wrote:
> 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