最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python-can中Notifier類的實現(xiàn)報文的實時分發(fā)

 更新時間:2026年04月10日 10:25:30   作者:名字太俊不提也罷  
文章介紹了利用python-can庫中的Notifier類創(chuàng)建一個線程來從總線讀取CAN消息,并通過回調(diào)函數(shù)將消息分發(fā)給監(jiān)聽對象,具有一定的參考價值,感興趣的可以了解一下

前言

這個問題之前很早之前就解決了,今天記錄一下這個相關(guān)知識點,防止后續(xù)遺忘

一、Notifier是什么類

Notifier 是 python-can 庫中的消息分發(fā)器,它創(chuàng)建后臺線程從 CAN 總線持續(xù)讀取消息,并實時分發(fā)給所有注冊的監(jiān)聽器(Listeners)

Notifier 對象用作總線的消息分發(fā)器。Notifier 創(chuàng)建一個線程來從總線讀取消息并將它們分發(fā)給需要監(jiān)聽的對象

核心工作流程

CAN 總線 → Notifier(后臺線程) → Listener1 → 處理邏輯
                              → Listener2 → 日志記錄
                              → Listener3 → 隊列緩存

二、具體實現(xiàn)代碼

代碼如下(示例):

class CanTool():
    def __init__(self):
        self.__mq = queue.Queue(50)
        self.__bus = None
        self.__notifier = None

    def notifier_init(self):
        """
        功能:初始化報文消息得回調(diào)函數(shù)
        """
        logger = can.Logger("logfile.asc")
        listeners = [
            self.put_mq,  # 回調(diào)函數(shù),通過隊列返回報文消息
            logger,  # 保存log日志,asc格式
        ]
        self.__notifier = can.Notifier(self.__bus, listeners) #接收來自self.__bus的報文,分發(fā)給listeners對象


    def bus_init(self, device: Optional[str], channel:Optional[str], bitrate:Optional[int]):
        """
        功能:初始化總線設(shè)備
        param1:設(shè)備名。str
        param2:通道,str
        param3:波特率,int
        """
        try:
            self.__bus = can.interface.Bus(bustype=device, channel=channel, bitrate=bitrate)
            self.notifier_init()
            return self.__bus
        except Exception:
            return self.__bus


    def put_mq(self,msg: Optional[can.Message]):
        """
        功能:接收報文得回調(diào)函數(shù)
        param1:分發(fā)得到的報文對象
        """
        if not self.__mq.full():
            self.__mq.put_nowait(msg)	#通過隊列進行傳輸

    def busclose(self):
        """
        功能:結(jié)束總線收發(fā),回收資源
        """
        self.__notifier.stop()	#停止分發(fā)
        self.__bus.shutdown()	#停止這個bus

總結(jié)

由于Python語言本身的問題,當程序讀取寫較大的總線消息時,會存在各種各樣的問題,本文中的方案,結(jié)合前面的報文篩選功能,能解決大部分這相關(guān)的問題。

重要注意事項

要點說明
必須調(diào)用 stop()否則監(jiān)聽器可能無法刷新緩沖區(qū),導(dǎo)致數(shù)據(jù)丟失
線程安全自定義監(jiān)聽器的 on_message_received 需考慮線程安全
避免阻塞監(jiān)聽器中的處理應(yīng)盡量快速,耗時操作請用隊列
異常處理監(jiān)聽器可實現(xiàn) on_error() 來捕獲異常

寫在結(jié)尾

到此這篇關(guān)于python-can中Notifier類的實現(xiàn)報文的實時分發(fā)的文章就介紹到這了,更多相關(guān)python-can報文實時分發(fā)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python+Selenium瀏覽器自動化測試與網(wǎng)頁自動登錄

    Python+Selenium瀏覽器自動化測試與網(wǎng)頁自動登錄

    在日常開發(fā)、測試和辦公自動化中,我們經(jīng)常會遇到一些重復(fù)性的瀏覽器操作,如果這些操作每天都要重復(fù)執(zhí)行,手動處理不僅浪費時間,還容易因為漏點、輸錯、忘記截圖而出錯,本文面向Python自動化測試初學(xué)者,通過一個完整案例講解如何使用Selenium自動打開網(wǎng)頁
    2026-05-05
  • Python字符串處理方法超全攻略

    Python字符串處理方法超全攻略

    字符串可以看作多個字符的按照先后順序組合,相當于就是序列結(jié)構(gòu),意味著可以對它進行遍歷、切片,這篇文章主要介紹了Python字符串處理方法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-12-12
  • Python3中的map函數(shù)調(diào)用后內(nèi)存釋放問題

    Python3中的map函數(shù)調(diào)用后內(nèi)存釋放問題

    這篇文章主要介紹了Python3中的map函數(shù)調(diào)用后內(nèi)存釋放問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 讓你一文弄懂Pandas文本數(shù)據(jù)處理

    讓你一文弄懂Pandas文本數(shù)據(jù)處理

    文本數(shù)據(jù)具有數(shù)據(jù)維度高、數(shù)據(jù)量大且語義復(fù)雜等特點,是一種較為復(fù)雜的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于Pandas文本數(shù)據(jù)處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • Python中xmltodict對xml的操作方式

    Python中xmltodict對xml的操作方式

    這篇文章主要介紹了Python中xmltodict對xml的操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于Python制作股票交易計算器

    基于Python制作股票交易計算器

    這篇文章主要為大家詳細介紹了如何利用Python和Html分別制作一個股票交易計算器,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考一下
    2024-12-12
  • 10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招)

    10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招)

    這篇文章主要介紹了10 行 Python 代碼教你自動發(fā)送短信(不想回復(fù)工作郵件妙招),目前在國內(nèi)通過手機短信保障信息安全是比較常見的,具體實例代碼大家跟隨小編一起通過本文學(xué)習(xí)吧
    2018-10-10
  • Python中pymysql 模塊的使用詳解

    Python中pymysql 模塊的使用詳解

    pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。
    2019-08-08
  • python通過imaplib模塊讀取gmail里郵件的方法

    python通過imaplib模塊讀取gmail里郵件的方法

    這篇文章主要介紹了python通過imaplib模塊讀取gmail里郵件的方法,涉及Python操作imaplib模塊操作郵件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)登錄接口的示例代碼

    Python實現(xiàn)登錄接口的示例代碼

    本篇文章主要介紹了Python實現(xiàn)登錄接口的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

色达县| 凤翔县| 日喀则市| 平江县| 砚山县| 会泽县| 苏州市| 石阡县| 彰化市| 从化市| 新化县| 邵东县| 绥芬河市| 青浦区| 女性| 武邑县| 门源| 志丹县| 当雄县| 西乌珠穆沁旗| 莱州市| 余干县| 汝南县| 陆河县| 望都县| 织金县| 汪清县| 敦煌市| 盈江县| 正阳县| 巨野县| 蚌埠市| 清河县| 多伦县| 云南省| 保康县| 土默特右旗| 江阴市| 托克逊县| 津南区| 栖霞市|