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中用max()方法求最大值的介绍
May 15 Python
python爬取51job中hr的邮箱
May 14 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python 调用win32pai 操作cmd的方法
May 28 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
深入分析python 排序
Aug 24 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
python游戏开发Pygame框架
Apr 22 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 远程关机实现代码
2009/11/10 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
下载给定网页上图片的方法
2014/02/18 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
python web框架学习笔记
2016/05/03 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
tensorflow 查看梯度方式
2020/02/04 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
Python与C/C++的相互调用案例
2021/03/04 Python
Linux上比较文件的命令都有哪些
2012/02/24 面试题
机关财务管理制度
2014/01/17 职场文书
大学信息公开实施方案
2014/03/09 职场文书
股份转让协议书范本
2015/01/27 职场文书
教师节祝酒词
2015/08/11 职场文书
2019年工作总结范文
2019/05/21 职场文书
CSS基础详解
2021/10/16 HTML / CSS
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android