千家信息网

python的blinker信号库怎么创建

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本文小编为大家详细介绍"python的blinker信号库怎么创建",内容详细,步骤清晰,细节处理妥当,希望这篇"python的blinker信号库怎么创建"文章能帮助大家解决疑惑,下面跟着小编的思路
千家信息网最后更新 2025年01月18日python的blinker信号库怎么创建

本文小编为大家详细介绍"python的blinker信号库怎么创建",内容详细,步骤清晰,细节处理妥当,希望这篇"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 signals = 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 signals = signal('autofelix')def fans(args):print(f'我是个小粉丝,{args} 是我的老师')# 信号注册一个接收者, 并指定主题s.connect(animal, sender='飞兔')if "__main__" == __name__:for i in ['飞兔', '飞兔小姐姐', '飞兔小哥哥']:s.send(i)

六、装饰器用法

  • 除了可以函数注册之外还有更简单的信号注册方法,那就是装饰器

from blinker import signals = signal('autofelix')@s.connectdef fans_one(args):print(f'我是粉丝一号,我关注了: {args}')@s.connectdef fans_two(args):print(f'我是粉丝二号,我关注了: {args}')if "__main__" == __name__:s.send('飞兔小哥')

七、订阅主题的装饰器

  • connect 的注册方法用着装饰器时有一个弊端就是不能够订阅主题

  • connect_via 方法支持订阅主题

from blinker import signals = signal('autofelix')@s.connect_via('飞兔')def fans(args):print(f'我是个小粉丝,{args} 是我的老师')if "__main__" == __name__:for i in ['飞兔', '飞兔小姐姐', '飞兔小哥哥']:s.send(i)

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

  • 如果对于一个发送者发送消息前要准备的耗时很长

  • 为了避免没有接收者导致浪费性能的情况

  • 可以先检查某一个信号是否有接收者

  • 在确定有接收者的情况下才发送

from blinker import signala1 = signal('autofelix-1')a2 = signal('autofelix-2')def fans(sender):print('我是个小粉丝')a1.connect(fans)if "__main__" == __name__:res = a1.receiversprint(res)if res:a1.send()res = a2.receiversprint(res)if res:a2.send()else:print("我是个偶像")

九、是否订阅了某个信号

  • 检查订阅者是否由某一个信号

from blinker import signala1 = 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信号库怎么创建"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

0