簡體   English   中英

Python 並發 - CAN 總線

[英]Python Concurrency - CAN Bus

我正處於開發基於 CAN 的可擴展硬件測試系統的初期階段。 測試系統的兩個主要功能是記錄總線上的所有流量並執行測試用例。 測試用例將主要由接收和發送 CAN 消息組成,同時評估消息數據有效負載的內容。 還將有一系列必須與串行控制設備集成的測試用例。

由於記錄所有 CAN 流量的重要性,我一直在考慮基於並發的程序。 但我不確定我應該實現哪種形式的並發。 我讀過asyncIOthreadingmultiprocessing 所以我對他們每個人都有一個高層次的看法。

我還在使用似乎內置了 asyncIO 的 python-can 庫,所以這讓我相信 asyncIO 應該沒問題。 我擔心如果測試用例協程處理速度不夠快,我可能不得不使用 asyncIO 建立某種緩沖。 總線速度500kb。 CAN 總線上有 2 個模塊。 最高消息頻率為 20 毫秒,我認為這足以讓 asyncIO 運行 2 個協程。 我還關心可擴展性。

我的假設正確嗎? 使用 asyncIO 就可以了嗎?

非常感謝任何和所有輸入。

看到您的項目涉及網絡和進程間通信,asyncIO 應該是最依賴和高度集成的並發方法。 除非您在主機之間進行大量通信,否則您不太可能需要線程或多處理。 即便如此,產生進程或線程也會帶來巨大的開銷,如果不小心使用,甚至可能會減慢執行時間。

我的最終建議是暫時堅持使用 asyncIO,一旦你有了項目的原型,你可以嘗試合並線程/多處理,看看你是否注意到加速。 有諸如timeit之類的模塊非常適合此目的。 如果您確實選擇使用帶有 asyncIO 的線程,那么事件循環中有一些非常有用的方法可以與線程很好地交互。 見鏈接: https://docs.python.org/3/library/asyncio-dev.html#asyncio-multithreading

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM