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信号库怎么创建"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
信号
接收者
支持
粉丝
主题
订阅
方法
小哥
多个
对象
就是
文章
之间
内容
发送者
哥哥
姐姐
情况
消息
老师
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
省国家网络安全周宣传方案
服务器dbs是
sql数据库实例按钮在哪里
双dhcp服务器
网络技术选择题中职水平
衡水专业软件开发团队
理发店网络安全管理制度
西电网络安全周
南宁市软件开发
环保节能软件开发
美国计算机协会提供的数据库
数据库升级影响服务端吗
网络安全自检及整改情况
校园网络安全知识讲座
济南电商软件开发
银海外贸数据库
软件开发+目标激励
华为服务器哪个是管理口
网络安全指导意义
csgo不再安全服务器
garmin更改服务器
网络技术认证有用么
软件开发和软件应用有什么不同
vivo软件开发工作强度
软件开发的例图
疫情数据库在哪里查看
网络安全征文创意题目
金山数据库软件哪个好
软件开发行业信息标准名称
信息系统与数据库