我正处于开发基于CAN的可扩展硬件测试系统的开始阶段。测试系统的两个主要功能是记录总线上的所有通信量并执行测试用例。测试用例主要由接收和发送CAN消息组成,同时评估消息数据有效负载的内容。还将有一系列测试用例必须与串行控制设备集成
由于记录所有CAN通信的重要性,我一直在考虑一个基于并发的程序。但我不确定应该实现哪种形式的并发。我读过有关异步、线程和多处理的内容。所以我对每一个都有一个高层次的看法
我还使用了python can库,它似乎内置了asyncIO,因此我认为asyncIO应该可以。我担心,如果测试用例协同路由处理速度不够快,我可能不得不使用asyncIO建立某种缓冲。公共汽车的速度是500kb。CAN总线上有2个模块。最高消息频率为20mS,我认为这足够asyncIO运行2个协同路由。我还关心可伸缩性
我的假设正确吗?使用asyncIO是否还可以
非常感谢您的任何意见
鉴于您的项目涉及网络和进程间通信,asyncIO应该是最可靠的并发方法。您不太可能需要线程或多处理,除非您在主机之间进行大量的通信。即使如此,生成进程或线程也会带来巨大的开销,如果不小心使用,甚至可能会降低执行时间
我的最后一个建议是暂时坚持使用asyncIO,一旦您有了项目的原型,您可以尝试合并线程/多处理,看看您是否注意到了加速。有一些像
timeit
这样的模块非常适合这个目的。如果您确实选择将线程与asyncIO结合使用,那么有一些非常有用的事件循环方法可以与线程很好地交互。请参阅链接:https://docs.python.org/3/library/asyncio-dev.html#asyncio-multithreading祝你好运
相关问题 更多 >
编程相关推荐