网站首页 > 技术文章 正文
Blinker是为了Python提供简单快速的信号机制,其核心就是框架核心功能或者是Flask扩展发生动作时所发送的通知,用于解耦大型应用功能。Blinker目前还不是Flask的默认依赖,所以想要Flask中能使用信号机制就需要我们提前先安装Blinker依赖库:
$ pip install blinker
Blinker 介绍
Blinker 由 Jason Kirtand 编写,并根据 MIT 许可证提供。该库支持 Python 2.7 和 Python 3.5 或更高版本;或 Jython 2.7 或更高版本;或 PyPy 2.7 或更高版本。首先我们通过一个示例来了解下如何使用Blinker:
from blinker import signal
started =signal('test-started') # 创建信号
def each(round):
print('Round {}!'.format(round))
def round_two(round):
print('Only {}'.format(round))
started.connect(each) # 订阅信号each
started.connect(round_two,sender=2) # 订阅信号round_two
for round in rang(1,4):
started.send(round) # 发送信号
# 运行结果
Round 1!
Round 2!
Only 2
Round 3!
如上,我们可以通过signal创建信号,通过connect来订阅信号,当订阅信息发生修改时,会触发订阅对象。通过信号的send方法触发信号。信号
匿名信号
信号不需要命名。每次调用 Signal 构造函数时都会创建一个唯一的信号。例如,上面处理器的替代实现可能会提供处理信号作为类属性:
from blinker import signal
class AltProcessor:
on_ready = signal()
on_complete = signal()
def __init__(self, name):
self.name = name
def go(self):
self.on_ready.send(self)
print("Alternate processing.")
self.on_complete.send(self)
def __repr__(self):
return '<AltProcessor %s>' % self.name
通过装饰器订阅信号
自从Blinker 1.1 开始可以用新的connect_via()装饰器订阅信号。使用代码如下:
from blinker import signal
started = signal('start-doc')
@started.connect_via("1")
@started.connect_via("2")
def completed(sender):
print("AltProcessor {} completed!".format(sender))
started.send("2")
自定义信号
在Flask应用中我们可以直接使用Blinker创建信号,现在定义一种对于上传大文件的信号:
from blinker import Namespace
web_signals = Namespace()
large_file_saved = web_signals.signal('large-file-saved')
当上传文件大于一个阈值时,可以发送这个信号。
猜你喜欢
- 2025-07-23 基于时频聚类与噪声估计的地震信号自适应去噪算法(Python)
- 2025-07-23 每天学点Python知识:常量(python常量类型)
- 2025-07-23 同事开玩笑说:你这个python程序要是外流出去了,可能会有危险
- 2025-07-23 Python多进程数据传输慢?试试这两种通信方式
- 2025-07-23 信号的自相关(信号的自相关互相关有何应用)
- 2025-07-23 如何使用Python绘制信号的波形?(python画波形图)
- 2025-07-23 强大的 Python 信号库:blinker 入门教程
- 2025-07-23 请介绍一下Python中的信号和信号处理函数。
- 2025-07-23 Python信号处理实战:使用signal模块响应系统事件
- 283℃Python短文,Python中的嵌套条件语句(六)
- 279℃PythonNet:实现Python与.Net代码相互调用!
- 279℃python笔记:for循环嵌套。end=""的作用,图形打印
- 274℃Python实现字符串小写转大写并写入文件
- 273℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 133℃原来2025是完美的平方年,一起探索六种平方的算吧
- 118℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 111℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
-
- python tkinter tk窗口组件的基础用法介绍
- 一起学python:Tkinter——轻装上阵,快速入门
- Python GUI 编程:tkinter 初学者入门指南——窗格窗口
- Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件
- Python,Tkinter的基础使用(python3 tkinter)
- 图文并茂:Python Tkinter从入门到高级实战全解析
- python tkinter桌面应用gui库基础介绍
- Python tkinter写个画图板,一个坑和实用知识解析
- python tkinter组件概述(python的tkinter模块详解)
- Flask中使用Blinker实现信号传递(flask传数据给前端)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)