python 教程之blinker 信号库

目录
  • 一、安装
  • 二、创建发送信号
  • 三、匿名信号
  • 四、组播信号
  • 五、接受方订阅主题
  • 六、装饰器用法
  • 七、订阅主题的装饰器
  • 八、检查信号是否有接收者
  • 九、是否订阅了某个信号

一、安装

  • 一个基于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 信号库的文章就介绍到这了,更多相关python 信号库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 强大的信号库 blinker 入门详细教程

    目录 1.信号 2.blinker使用 2.1命名信号 2.2匿名信号 2.3组播信号 2.4接收方订阅主题 2.5装饰器用法 2.6可订阅主题的装饰器 2.7检查信号是否有接收者 2.8检查订阅者是否订阅了某个信号 3.基于blinker的Flask信号 3.1简单Flaskdemo 3.2自定义信号 3.3Flask自带信号 4.总结 1.信号 信号是一种通知或者说通信的方式,信号分为发送方和接收方.发送方发送一种信号,接收方收到信号的进程会跳入信号处理函数,执行完后再跳回原来的位置继续执行

  • Python的信号库Blinker用法详解

    作为一个信号库,使用时候是支持一对一以及一对多的订阅模式,可以实现发送数据等,一般情况下,只要能够使用到Blinker的,一般都是应用在技术设计以及垃圾回收上等等,以上就是关于Blinker库的基本信息,具体的情况,小编将详细的为大家介绍讲解,好啦一起来了解看下吧. 安装环境: Python 3.6.4 安装方式: pip install blinker 使用实例: In [1]: from blinker import signal In [2]: a = signal('signal_tes

  • python 教程之blinker 信号库

    目录 一.安装 二.创建发送信号 三.匿名信号 四.组播信号 五.接受方订阅主题 六.装饰器用法 七.订阅主题的装饰器 八.检查信号是否有接收者 九.是否订阅了某个信号 一.安装 一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播 支持注册全局命名信号,支持自定义命名信号 支持匿名信号,线程安全 支持与接收者之间的持久连接与短暂连接 通过弱引用实现与接收者之间的自动断开连接 支持发送任意大小的数据,支持收集信号接收者的返回值 pip install bl

  • Python教程之Python多态的深层次理解

    前言: 多态的实现必须满足两个前提条件 1.继承:多态一定是发生在子类和父类之间 2.重写:多态子类重写了父类的方法 记住这两点再结合代码示例有助于理解多态 #多态的代码实例 class Farther: def behavior(self,action): print("父亲会%s" % action) # 定义Son类继承Farther类 class Son(Farther): def behavior(self,action): print("儿子会%s" %

  • Python教程之pytest命令行方式运行用例

    目录 前言 pycharm里命令行运行用例 终端中使用pytest 用例全部运行 打印详情-v 指定组别 使用表达式指定某些用例-k 遇到失败即停止运行-x 指定运行某个测试py文件 指定运行某个class 指定运行某个方法: 其他 总结 前言 用命令行方式调用用例是我们最常用的方式,这方面确实比java的TestNG框架要好用许多,至少不用写xml文件,为了提供定制化运行用例的方式,pytest提供了许多运行命令以供定制化运行某一类测试用例或者某个测试用例等: pycharm里命令行运行用例

  • python教程之用py2exe将PY文件转成EXE文件

    一.简介 py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序.py2exe是发布在开源许可证下的. 二.安装py2exe 从http://prdownloads.sourceforge.net/py2exe下载并运行与你所安装的Python对应的py2exe版本的installer,这将安装py2exe和相应的例子:这些例子被安装在lib\site-packages\py2exe\sampl

  • python反编译教程之2048小游戏实例

    目录 一.背景 二.工具准备 1.pyinstxtractor.py脚本用于反编译python 2.winhex用于编辑16进制的软件 三.反编译 1.放置脚本 2.运行脚本 3.找到软件名文件和struct文件 4.托入winhex进行对比 5.将struct多出的那一行复制到puzzle前面 6.更改其后缀为.pyc 7.安装第三方库uncompyle 8.python版本为3.8以下可以调用uncompyle 9.python版本为3.8以上可以选择在线工具(.pyc>.py) 10.最后

  • Python pip超详细教程之pip的安装与使用

    目录 1. pip的安装与卸载 1.1 pip的安装 1.2 pip的卸载 2. pip的使用 2.1 帮助信息 2.2 查看pip版本 2.3 更新pip版本 2.4 安装库 2.5 查看库 2.6 升级库 2.7 卸载库 3. 提高pip下载速度 1. pip的安装与卸载 1.1 pip的安装 python中有许多有用的库,要使用这些第三方库,需要安装pip 打开cmd,输入以下命令安装pip: python -m ensurepip --default-pip 出现如下图所示,代表pip安

  • Python基础教程之if判断,while循环,循环嵌套

    if判断 判断的定义 如果条件满足,就做一件事:条件不满足,就做另一件事:  判断语句又被称为分支语句,有判断,才有分支: if判断语句基本语法 if语句格式: if 判断的条件:     条件成立后做的事     ... ... 代码缩进为一个tab键,或者四个空格,官方建议使用空格:但应注意,在python开发中,tab和空格不能混用! 判断年龄示例: # 判断是否成年,成年则可以进网吧 age = 19 if age>=18: print("你满了18岁,可以进网吧") i

  • python 安装教程之Pycharm安装及配置字体主题,换行,自动更新

    下载 下面提供两种下载地址,官网地址一般为最新的,网盘地址会定期更新,但是不保证一定是最新的 官网下载地址:https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows 百度网盘地址: https://pan.baidu.com/s/1EhtY5PD3XagJ-nTw8IX8Vw 提取码: z8ej 安装 1.双击 exe 安装 2.自定义安装路径 2.配置 3.添加到开始菜单里 可以选择放在其他

随机推荐