blinker

  • 1 简介

  • 2 安装

  • 3 使用

    • 3.1 订阅信号

    • 3.2 发布信号

    • 3.3 订阅指定的发布者

    • 3.4 订阅者接收发布者传递的数据

    • 3.5 匿名信号

    • 3.6 通过装饰器来订阅

    • 3.7 检查信号是否有订阅者

  • 4 例子

    • 4.1 flask

    • 4.2 demo

1 简介

Blinker 是一个基于 Python 的强大的信号库,支持一对一、一对多的订阅发布模式,支持发送任意大小的数据等等,且线程安全。

2 安装

3 使用

signal 为单例模式

signal 使用了单例模式,允许代码的不同模块得到相同的 signal,而不用互相传参。

3.1 订阅信号

使用.connect(func) 方法来订阅一个信号,当信号发布时,该信号的订阅者会执行 func。

3.2 发布信号

使用.send() 方法来发布信号,会通知所有订阅者,如果没有订阅者则什么都不会发生。

3.3 订阅指定的发布者

.connect() 方法接收一个可选参数 sender,可用于接收指定发布者的信号。

3.4 订阅者接收发布者传递的数据

除了之前的通过.connect 方法来订阅外,还可以通过装饰器的方法来订阅。

订阅的方法可以接收发布者传递的数据。

.send 方法的返回值是一个由元组组成的列表,每个元组的第一个值为订阅者的方法,第二个值为订阅者的返回值

3.5 匿名信号

信号可以是匿名的,可以使用 Signal 类来创建唯一的信号(S 大写,这个类不像之前的 signal,为非单例模式)。 下面的 on_ready 和 on_complete 为两个不同的信号

3.6 通过装饰器来订阅

在订阅者接收发布者传递的数据中简单地演示了使用装饰器来订阅,但是那种订阅方式不支持订阅指定的发布者,这时候我们可以用.connect_via(sender)

3.7 检查信号是否有订阅者

4 例子

4.1 flask

flask/signals.py

4.2 demo

备注

  • send 第一个参数不能传 kwargs

Last updated