A concise Publish/Subscribe utility module. It supports both free-form signal names and a stricter style where signals are declared first. You can also mix them.
import smoke class MyCls(smoke.Broker): appears = smoke.signal('appears') leaves = smoke.signal('leaves') def say_hello(what): print("hello %s" % (what,)) def say_goodbye(what): print("good bye %s" % (what,)) o = MyCls() # Using broker o.subscribe("appears", say_hello) o.publish("appears", what='world') # Using declared signals o.leaves.subscribe(say_goodbye) o.leaves.publish(what='world')