装饰器
blinker
https://zhuanlan.zhihu.com/p/435076618
import time
from blinker import signal
# 创建一个名为 'user_registered' 的信号
user_registered = signal('user_registered')
# 定义两个处理函数
def send_welcome_email(sender, user):
time.sleep(10)
print(f"Sending welcome email to {user}")
def log_registration(sender, user):
print(f"Logging user registration: {user}")
# 连接处理函数到信号
user_registered.connect(send_welcome_email)
user_registered.connect(log_registration)
def reg():
# 模拟用户注册并发出信号
new_user = {'username': 'john_doe', 'email': 'john@example.com'}
user_registered.send(user=new_user)
reg()
print("over")
# blinker是同步的,用来解耦代码
blinker 在三方项目中的使用
flask
mongoengine
MongoEngine提供的信号如下:
- pre_init: 在创建一个新的 Document 或者 EmbeddedDocument 实例对象之后,并且对象初始化之前调用。
- post_init:在 Document 或者 EmbeddedDocument 实例对象初始化完成之后调用。
- pre_save:在 save 方法执行之前调用。
- pre_save_post_validation:在数据检验完成之后,数据保存之前调用。
- post_save:在数据保存完成之后调用。
- pre_delete:在 delete 方法执行之前调用。
- post_delete:在记录成功删除之后调用。
- pre_bulk_insert:在数据检验之后,数据插入之前调用。
- post_bulk_insert:在数据成功插入之后调用。