我正处于开发一个可扩展的基于CAN的硬件测试系统的初期阶段。测试系统的两个主要功能是记录总线上的所有流量并执行测试用例。测试用例主要由接收和发送CAN消息组成,同时评估消息数据有效载荷的内容。还将有一系列测试用例,这些测试用例必须与串行控制设备集成。
由于日志记录的重要性,我一直在考虑一个基于并发的程序。但我不确定我应该实现哪种形式的并发。我读过关于asyncIO、线程和多处理的文章。所以我对他们每个人都有一个高层次的看法。
我还在使用python库,这个库似乎内置了asyncIO,因此我相信asyncIO应该很好。我担心,如果测试用例协同处理不够快,我可能不得不使用asyncIO建立某种缓冲。公共汽车速度500 bus。CAN总线上有两个模块。最高的消息频率是20 is,我想这足够asyncIO运行2个协同器的时间。我还关注可伸缩性。
我的假设正确吗?使用asyncIO应该很好吗?
任何和所有的输入都是非常感谢的。
发布于 2020-06-18 01:43:35
考虑到您的项目涉及网络和进程间通信,asyncIO应该是最依赖和高度结合的并发方法。除非您在主机之间进行大量通信,否则不太可能需要线程或多处理。即使这样,生成进程或线程也会带来很大的开销,如果不小心使用,甚至可能会减慢的执行时间。
我的最后一个建议是现在坚持使用asyncIO,一旦您有了项目的原型,就可以尝试将线程/多处理结合起来,看看是否注意到了速度的提高。有些模块(如timeit )正是实现这一目的的最佳选择。如果您确实选择了使用asyncIO线程,那么有一些非常有用的事件循环方法可以与线程很好地交互。参见链接:https://docs.python.org/3/library/asyncio-dev.html#asyncio-multithreading
祝你好运!
https://stackoverflow.com/questions/62440045
复制相似问题