python 教程之blinker 信号库

 更新时间:2022年05月04日 13:34:19   作者:autofelix  
这篇文章主要介绍了python 教程之blinker 信号库,文章基于python的相关资料展开详细的内容说明。具有一定的参考价价值,需要的小伙伴可以参考一下

一、安装

  • 一个基于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 信号库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 轻松实现TensorFlow微信跳一跳的AI

    轻松实现TensorFlow微信跳一跳的AI

    这篇文章主要教大家如何轻松实现TensorFlow微信跳一跳的AI,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 在python中利用pycharm自定义代码块教程(三步搞定)

    在python中利用pycharm自定义代码块教程(三步搞定)

    这篇文章主要介绍了在python中利用pycharm自定义代码块教程(三步搞定),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python3之模块psutil系统性能信息使用

    python3之模块psutil系统性能信息使用

    psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,这篇文章主要介绍了python3之模块psutil系统性能信息使用,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • python入门课程第五讲之序列和字符串

    python入门课程第五讲之序列和字符串

    这篇文章主要介绍了python入门课程第五讲之序列和字符串,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python爬取门户论坛评论浅谈Python未来发展方向

    Python爬取门户论坛评论浅谈Python未来发展方向

    这篇文章主要介绍了如何实现Python爬取门户论坛评论,附含图片示例代码,讲解了详细的操作过程,有需要的的朋友可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • 使用python实现拉钩网上的FizzBuzzWhizz问题示例

    使用python实现拉钩网上的FizzBuzzWhizz问题示例

    这篇文章主要介绍了使用python实现拉钩网上的FizzBuzzWhizz问题示例,需要的朋友可以参考下
    2014-05-05
  • Python绘图库之pyqtgraph的用法详解

    Python绘图库之pyqtgraph的用法详解

    PyQtGraph建立在Qt QGraphicsScene的原生库,可提供更好更高性能绘图能力,特别是对于实时数据,可以提供交互性和使用Qt图形小部件轻松自定义绘图的能力。本文就来解释一下pyqtgraph的用法,需要的可以收藏一下
    2022-12-12
  • 总结Python使用过程中的bug

    总结Python使用过程中的bug

    今天给大家带来的是关于Python的相关知识,文章围绕着Python使用过程中的bug展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • 使用python将mysql数据库的数据转换为json数据的方法

    使用python将mysql数据库的数据转换为json数据的方法

    这篇文章主要介绍了使用python将mysql数据库的数据转换为json数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python中导入自定义模块的几种方法总结

    Python中导入自定义模块的几种方法总结

    这篇文章主要介绍了Python中导入自定义模块的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论