# 1 信号
信号是一种通知或者说通信的方式,信号分为发送方和接收方。发送方发送一种信号,接收方收到信号的进程会跳入信号处理函数,执行完后再跳回原来的位置继续执行。
常见的 Linux 中的信号,通过键盘输入 Ctrl+C,就是发送给系统一个信号,告诉系统退出当前进程。
信号的特点就是发送端通知订阅者发生了什么。使用信号分为 3 步:定义信号,监听信号,发送信号。

Python 中提供了信号概念的通信模块,就是blinker。
Blinker 是一个基于 Python 的强大的信号库,它既支持简单的点对点通信,也支持点对多点的组播。Flask 的信号机制就是基于它建立的。Blinker 的内核虽然小巧,但是功能却非常强大,它支持以下特性:
-
支持注册全局命名信号
-
支持匿名信号
-
支持自定义命名信号
-
支持与接收者之间的持久连接与短暂连接
-
通过弱引用实现与接收者之间的自动断开连接
-
支持发送任意大小的数据
-
支持收集信号接收者的返回值
-
线程安全
# 2 blinker 使用
安装方法:
pip install blinker
2.1 命名信号
from blinker import signal
# 定义一个信号
s = signal('king')
def animal(args):
print('我是小钻风,大王回来了,我要去巡山')
# 信号注册一个接收者
s.connect(animal)
if "__main__" == __name__:
# 发送信号
s.send()

2.2 匿名信号
blinker 也支持匿名信号,就是不需要指定一个具体的信号值。创建的每一个匿名信号都是互相独立的。
from blinker import Signal
s = Signal()
def animal(sender):
print('我是小钻风,大王回来了,我要去巡山')
s.connect(animal)
if "__main__" == __name__:
s.send()
2.3 组播信号
组播信号是比较能体现出信号优点的特征。多个接收者注册到信号上,发送者只需要发送一次就能传递信息到多个接收者。
from blinker import signal
s = signal('king')
def animal_

本文介绍Python的blinker库,一个强大的信号库,用于实现进程间的通信。内容涵盖信号概念、blinker的基本用法,包括命名信号、匿名信号、组播信号的创建和订阅,以及在Flask中的应用,展示了信号如何增强应用解耦和发布订阅功能。同时,文章讨论了信号的优缺点,如线程安全但不支持异步。
最低0.47元/天 解锁文章
750

被折叠的 条评论
为什么被折叠?



