您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“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 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信號庫怎么創建”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。