1

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

由于记录所有 CAN 流量的重要性,我一直在考虑基于并发的程序。但我不确定我应该实现哪种形式的并发。我读过asyncIOthreadingmultiprocessing。所以我对他们每个人都有一个高层次的看法。

我还在使用似乎内置了 asyncIO 的 python-can 库,所以这让我相信 asyncIO 应该没问题。我担心如果测试用例协程处理速度不够快,我可能不得不使用 asyncIO 建立某种缓冲。总线速度500kb。CAN 总线上有 2 个模块。最高消息频率为 20 毫秒,我认为这足以让 asyncIO 运行 2 个协程。我还关心可扩展性。

我的假设正确吗?使用 asyncIO 就可以了吗?

非常感谢任何和所有输入。

4

1 回答 1

1

看到您的项目涉及网络和进程间通信,asyncIO 应该是最依赖和高度集成的并发方法。除非您在主机之间进行大量通信,否则您不太可能需要线程或多处理。即便如此,产生进程或线程也会带来巨大的开销,如果不小心使用,甚至可能会减慢执行时间。

我的最终建议是暂时坚持使用 asyncIO,一旦你有了项目的原型,你可以尝试合并线程/多处理,看看你是否注意到加速。有诸如此类的模块timeit非常适合此目的。如果您确实选择使用带有 asyncIO 的线程,那么事件循环中有一些非常有用的方法可以与线程很好地交互。见链接:https ://docs.python.org/3/library/asyncio-dev.html#asyncio-multithreading

祝你好运!

于 2020-06-18T01:43:35.823 回答