python blinker 信号库


Posted in Python onMay 04, 2022

一、安装

  • 一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播
  • 支持注册全局命名信号,支持自定义命名信号
  • 支持匿名信号,线程安全
  • 支持与接收者之间的持久连接与短暂连接
  • 通过弱引用实现与接收者之间的自动断开连接
  • 支持发送任意大小的数据,支持收集信号接收者的返回值
pip install blinker

二、创建发送信号

  • 信号通过 signal() 方法进行创建
  • 信号通过 send() 方法进行发送
from blinker import signal
# 创建一个信号,并给信号命名
s = signal('autofelix')
def say(args):
print('我是飞兔小哥')
# 信号注册一个接收者
s.connect(say)
if "__main__" == __name__:
# 发送信号
s.send()

三、匿名信号

  • blinker也支持匿名信号,就是不需要指定一个具体的信号值
  • 创建的每一个匿名信号都是互相独立的
from blinker import signal
# 创建一个匿名信号
s = signal()
def say(args):
print('我是飞兔小哥')
# 信号注册一个接收者
s.connect(say)
if "__main__" == __name__:
# 发送信号
s.send()

四、组播信号

  • 组播信号是比较能体现出信号优点的特征
  • 多个接收者注册到信号上,发送者只需要发送一次就能传递信息到多个接收者
from blinker import signal
s = signal('autofelix')
def fans_one(args):
print(f'我是粉丝一号,我关注了: {args}')
def fans_two(args):
print(f'我是粉丝二号,我关注了: {args}')
s.connect(fans_one)
s.connect(fans_two)
if "__main__" == __name__:
s.send('飞兔小哥')

五、接受方订阅主题

  • 只有当指定的主题发送消息时才发送给接收方
from blinker import signal
s = signal('autofelix')
def fans(args):
print(f'我是个小粉丝,{args} 是我的老师')
# 信号注册一个接收者, 并指定主题
s.connect(animal, sender='飞兔')
if "__main__" == __name__:
for i in ['飞兔', '飞兔小姐姐', '飞兔小哥哥']:
s.send(i)

六、装饰器用法

  • 除了可以函数注册之外还有更简单的信号注册方法,那就是装饰器
from blinker import signal
s = signal('autofelix')
@s.connect
def fans_one(args):
print(f'我是粉丝一号,我关注了: {args}')
@s.connect
def fans_two(args):
print(f'我是粉丝二号,我关注了: {args}')
if "__main__" == __name__:
s.send('飞兔小哥')

七、订阅主题的装饰器

  • connect 的注册方法用着装饰器时有一个弊端就是不能够订阅主题
  • connect_via 方法支持订阅主题
from blinker import signal
s = signal('autofelix')
@s.connect_via('飞兔')
def fans(args):
print(f'我是个小粉丝,{args} 是我的老师')
if "__main__" == __name__:
for i in ['飞兔', '飞兔小姐姐', '飞兔小哥哥']:
s.send(i)

八、检查信号是否有接收者

  • 如果对于一个发送者发送消息前要准备的耗时很长
  • 为了避免没有接收者导致浪费性能的情况
  • 可以先检查某一个信号是否有接收者
  • 在确定有接收者的情况下才发送
from blinker import signal
a1 = signal('autofelix-1')
a2 = signal('autofelix-2')
def fans(sender):
print('我是个小粉丝')
a1.connect(fans)
if "__main__" == __name__:
res = a1.receivers
print(res)
if res:
a1.send()
res = a2.receivers
print(res)
if res:
a2.send()
else:
print("我是个偶像")

九、是否订阅了某个信号

  • 检查订阅者是否由某一个信号
from blinker import signal
a1 = signal('autofelix-1')
a2 = signal('autofelix-2')
def fans(sender):
print('我是个小粉丝')
a1.connect(fans)
if "__main__" == __name__:
res = a1.has_receivers_for(fans)
print(res)
res = a2.has_receivers_for(fans)
print(res)

到此这篇关于python 教程之blinker 信号库的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
Python getopt模块处理命令行选项实例
May 13 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
python把1变成01的步骤总结
Feb 27 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
Django后台管理系统的图文使用教学
Jan 20 Python
python实现录屏功能(亲测好用)
Mar 02 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
python三子棋游戏
May 04 #Python
python神经网络 使用Keras构建RNN训练
May 04 #Python
python神经网络学习 使用Keras进行回归运算
May 04 #Python
python神经网络学习 使用Keras进行简单分类
May 04 #Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 #Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
You might like
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
javascript显示中文日期的方法
2015/06/18 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
python遍历数组的方法小结
2015/04/30 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
python中学习K-Means和图片压缩
2017/11/20 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
python快排算法详解
2019/03/04 Python
Python字符串格式化输出代码实例
2019/11/22 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
银行员工辞职信范文
2014/01/20 职场文书
《理想》教学反思
2014/02/17 职场文书
道路交通安全实施方案
2014/03/12 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
交流会主持词
2015/07/02 职场文书
2016年教师新年寄语
2015/08/18 职场文书
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server