python blinker库
Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播。Flask的信号机制就是基于它建立的。 Blinker的内核虽然小巧,但是功能却非常强大,它支持以下特性: 支持注册全局命名信号 支持匿名信号 支持自定义命名信号 支持与接收者之间的持久连接与短暂连接 通过弱引用实现与接收者之间的自动断开连接 支持发送任意大小的数据 支持收集信号接收者的返回值 线程安全 创建信号 信号通过 signal() 方法进行创建: >>> from blinker import signal >>> initialized = signal("initialized") >>> initialized is signal("initialized") True 每次调用 signal('name') 都会返回同一个信号对象。因此这里 signal() 方法使用了单例模式。 订阅信号 使用 Signal.connect() 方法注册一个函数,每当触发信号的时候,就会调用该函数。该函数以触发信号的对象作为参数,这个函数其实就是信号订阅者。 >>> def subscriber(sender): ... print("Got a signal sent by %r" % sender) ... >>> ready = signal('ready') >