【问题标题】:Python Concurrency - CAN BusPython 并发 - CAN 总线
【发布时间】:2020-10-07 22:10:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python concurrency python-asyncio can-bus python-can


    【解决方案1】:

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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多