- :note: The listener is held by Publisher() only by *weak* reference.
- This means you must ensure you have at least one strong reference
- to listener, otherwise it will be DOA ("dead on arrival"). This is
- particularly easy to forget when wrapping a listener method in a
- proxy object (e.g. to bind some of its parameters), e.g.
-
- :code:
- class Foo:
- def listener(self, event): pass
- class Wrapper:
- def __init__(self, fun): self.fun = fun
- def __call__(self, *args): self.fun(*args)
- foo = Foo()
- Publisher().subscribe( Wrapper(foo.listener) ) # whoops: DOA!
- wrapper = Wrapper(foo.listener)
- Publisher().subscribe(wrapper) # good!
-
- :note: Calling
- this method for the same listener, with two topics in the same
- branch of the topic hierarchy, will cause the listener to be
- notified twice when a message for the deepest topic is sent. E.g.
- subscribe(listener, 't1') and then subscribe(listener, ('t1','t2'))
- means that when calling sendMessage('t1'), listener gets one message,
- but when calling sendMessage(('t1','t2')), listener gets message
- twice.
+ :note: The listener is held by Publisher() only by *weak*
+ reference. This means you must ensure you have at
+ least one strong reference to listener, otherwise it
+ will be DOA ("dead on arrival"). This is particularly
+ easy to forget when wrapping a listener method in a
+ proxy object (e.g. to bind some of its parameters),
+ e.g.::
+
+ class Foo:
+ def listener(self, event): pass
+ class Wrapper:
+ def __init__(self, fun): self.fun = fun
+ def __call__(self, *args): self.fun(*args)
+ foo = Foo()
+ Publisher().subscribe( Wrapper(foo.listener) ) # whoops: DOA!
+ wrapper = Wrapper(foo.listener)
+ Publisher().subscribe(wrapper) # good!
+
+ :note: Calling this method for the same listener, with two
+ topics in the same branch of the topic hierarchy, will
+ cause the listener to be notified twice when a message
+ for the deepest topic is sent. E.g.
+ subscribe(listener, 't1') and then subscribe(listener,
+ ('t1','t2')) means that when calling sendMessage('t1'),
+ listener gets one message, but when calling
+ sendMessage(('t1','t2')), listener gets message twice.
+