我正处于开发可扩展的基于CAN的硬件测试系统的初期阶段。测试系统的2个主要功能是记录总线上的所有流量并执行测试用例。测试用例主要由接收和发送CAN消息组成,同时评估消息数据有效载荷的内容。也将有一系列必须与串行控制设备集成的测试用例。
由于记录所有CAN流量的重要性,我一直在考虑基于并发的程序。但是我不确定应该实现哪种形式的并发。我已经读过关于asyncIO,threading和multiprocessing。因此,我对它们每个人都有较高的了解。
我也在使用似乎内置了asyncIO的python-can库,因此使我相信asyncIO应该不错。我担心如果测试用例协程的处理速度不够快,我可能必须使用asyncIO建立某种缓冲。总线速度500kb。 CAN总线上有2个模块。最高消息频率为20ms,我认为这足以让asyncIO运行2个协程。我还关注可伸缩性。
我的假设正确吗?使用asyncIO应该很好吗?
非常感谢所有输入。
看到您的项目涉及网络和进程间通信,因此asyncIO应该是最依赖并大量并发的并发方法。除非您在主机之间进行通信的[[lot,否则不太可能需要线程化或多处理。即使这样,生成进程或线程也会产生大量开销,如果使用不当,甚至可能slow减少执行时间。
我的最终建议是暂时使用asyncIO,一旦您拥有了项目的原型,就可以尝试合并线程/多处理并查看是否注意到加速。有一些模块timeit
非常适合此目的。如果确实选择将线程与asyncIO一起使用,则事件循环的某些very有用方法与线程可以很好地交互。参见链接:https://docs.python.org/3/library/asyncio-dev.html#asyncio-multithreading
祝你好运!