信号使用三大步骤
》》定义信号
》》监控信号 信号名称.connect(函数名) 或者 @信号名.connect 装饰器 函数
》》发生信号
python
# 1. 导入并创建信号
from blinker import signal
user_logged_in = signal('user-logged-in') # 创建一个名为'user-logged-in'的命名信号
# 2. 定义接收器(接收函数)并连接到信号
def on_login(sender, username): # 'sender' 是信号的发送者
print(f"用户 {username} 登录了,信号来自: {sender}")
user_logged_in.connect(on_login) # 将接收器连接到信号
# 3. 在合适的时机发送信号
if __name__ == "__main__":
# 发送信号,第一个参数 'app' 会传递给接收器的 'sender'
user_logged_in.send('app', username='张三')
python
from flask import Flask
from blinker import Namespace
app = Flask(__name__)
#【1】信号机制 3步走
# Namespace:命名空间
#1.定义信号
sSpace = Namespace()
fire_signal = sSpace.signal('发送信号火箭')
#2.监听信号
def fire_play(sender,uname):
print(sender)
print(uname)
print("start play")
fire_signal.connect(fire_play)
# 或者
@fire_signal.connect
def fire_play(sender,uname):
print(sender)
print(uname)
print("start play")
#3.发送一个信号
fire_signal.send(uname ='xxx')
if __name__ == '__main__':
app.run(debug=True)

内置信号


命名空间
python
from blinker import Namespace
_signals = Namespace()
xx = _signals.signal('xxxxxxx')
==================================
from blinker import signal
xx = signal('xxxxxxx')


python
from blinker import signal, Namespace
# 方式1:全局默认命名空间
sig1 = signal('login')
sig2 = signal('login')
print(sig1 is sig2) # True ------ 同一个对象
# 方式2:自定义命名空间
ns = Namespace()
sig3 = ns.signal('login')
sig4 = ns.signal('login')
print(sig3 is sig4) # True ------ 同一个命名空间内相同名称是同一个
# 跨命名空间比较
print(sig1 is sig3) # False ------ 不同命名空间,即使是相同名称也是不同对象