python?教程之blinker?信號庫
更新時間:2022年05月04日 13:34:19 作者:autofelix
這篇文章主要介紹了python?教程之blinker?信號庫,文章基于python的相關資料展開詳細的內容說明。具有一定的參考價價值,需要的小伙伴可以參考一下
一、安裝
- 一個基于
Python的強大的信號庫,它既支持簡單的對象到對象通信,也支持針對多個對象進行組播 - 支持注冊全局命名信號,支持自定義命名信號
- 支持匿名信號,線程安全
- 支持與接收者之間的持久連接與短暫連接
- 通過弱引用實現(xiàn)與接收者之間的自動斷開連接
- 支持發(fā)送任意大小的數(shù)據(jù),支持收集信號接收者的返回值
pip install blinker
二、創(chuàng)建發(fā)送信號
- 信號通過
signal()方法進行創(chuàng)建 - 信號通過
send()方法進行發(fā)送
from blinker import signal
# 創(chuàng)建一個信號,并給信號命名
s = signal('autofelix')
def say(args):
print('我是飛兔小哥')
# 信號注冊一個接收者
s.connect(say)
if "__main__" == __name__:
# 發(fā)送信號
s.send()三、匿名信號
blinker也支持匿名信號,就是不需要指定一個具體的信號值- 創(chuàng)建的每一個匿名信號都是互相獨立的
from blinker import signal
# 創(chuàng)建一個匿名信號
s = signal()
def say(args):
print('我是飛兔小哥')
# 信號注冊一個接收者
s.connect(say)
if "__main__" == __name__:
# 發(fā)送信號
s.send()四、組播信號
- 組播信號是比較能體現(xiàn)出信號優(yōu)點的特征
- 多個接收者注冊到信號上,發(fā)送者只需要發(fā)送一次就能傳遞信息到多個接收者
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('飛兔小哥')五、接受方訂閱主題
- 只有當指定的主題發(fā)送消息時才發(fā)送給接收方
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)六、裝飾器用法
- 除了可以函數(shù)注冊之外還有更簡單的信號注冊方法,那就是裝飾器
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)八、檢查信號是否有接收者
- 如果對于一個發(fā)送者發(fā)送消息前要準備的耗時很長
- 為了避免沒有接收者導致浪費性能的情況
- 可以先檢查某一個信號是否有接收者
- 在確定有接收者的情況下才發(fā)送
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 信號庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在python中利用pycharm自定義代碼塊教程(三步搞定)
這篇文章主要介紹了在python中利用pycharm自定義代碼塊教程(三步搞定),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python3之模塊psutil系統(tǒng)性能信息使用
psutil是個跨平臺庫,能夠輕松實現(xiàn)獲取系統(tǒng)運行的進程和系統(tǒng)利用率,這篇文章主要介紹了python3之模塊psutil系統(tǒng)性能信息使用,感興趣的小伙伴們可以參考一下2018-05-05
Python爬取門戶論壇評論淺談Python未來發(fā)展方向
這篇文章主要介紹了如何實現(xiàn)Python爬取門戶論壇評論,附含圖片示例代碼,講解了詳細的操作過程,有需要的的朋友可以借鑒參考下,希望可以有所幫助2021-09-09
使用python實現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例
這篇文章主要介紹了使用python實現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例,需要的朋友可以參考下2014-05-05
使用python將mysql數(shù)據(jù)庫的數(shù)據(jù)轉換為json數(shù)據(jù)的方法
這篇文章主要介紹了使用python將mysql數(shù)據(jù)庫的數(shù)據(jù)轉換為json數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07

