Python并发-CAN总线

问题描述 投票:1回答:1

我正处于开发可扩展的基于CAN的硬件测试系统的初期阶段。测试系统的2个主要功能是记录总线上的所有流量并执行测试用例。测试用例主要由接收和发送CAN消息组成,同时评估消息数据有效载荷的内容。也将有一系列必须与串行控制设备集成的测试用例。

由于记录所有CAN流量的重要性,我一直在考虑基于并发的程序。但是我不确定应该实现哪种形式的并发。我已经读过关于asyncIOthreadingmultiprocessing。因此,我对它们每个人都有较高的了解。

我也在使用似乎内置了asyncIO的python-can库,因此使我相信asyncIO应该不错。我担心如果测试用例协程的处理速度不够快,我可能必须使用asyncIO建立某种缓冲。总线速度500kb。 CAN总线上有2个模块。最高消息频率为20ms,我认为这足以让asyncIO运行2个协程。我还关注可伸缩性。

我的假设正确吗?使用asyncIO应该很好吗?

非常感谢所有输入。

python concurrency python-asyncio can-bus python-can
1个回答
0
投票

看到您的项目涉及网络和进程间通信,因此asyncIO应该是最依赖并大量并发的并发方法。除非您在主机之间进行通信的[[lot,否则不太可能需要线程化或多处理。即使这样,生成进程或线程也会产生大量开销,如果使用不当,甚至可能slow减少执行时间。

我的最终建议是暂时使用asyncIO,一旦您拥有了项目的原型,就可以尝试合并线程/多处理并查看是否注意到加速。有一些模块timeit非常适合此目的。如果确实选择将线程与asyncIO一起使用,则事件循环的某些

very有用方法与线程可以很好地交互。参见链接:https://docs.python.org/3/library/asyncio-dev.html#asyncio-multithreading

祝你好运!
© www.soinside.com 2019 - 2024. All rights reserved.