首页 > 解决方案 > Python快速计算和慢速串行写入:多线程或多进程

问题描述

我有一个机器人项目,基本上是一个路径跟踪问题。在PC中,参考生成算法是在Python3.65中实现的。该算法采用室内 GPS 数据并使用这些不断更新的数据来计算机器人汽车的参考路径。当然,算法在一段 时间内运行 True: .... 框架。该算法只有在采样频率很高的情况下才能正常工作,比如 0.001s。但是,问题是,在计算参考路径后,需要通过 Serial.write() 将路径信息逐字节写入 PC 的串行端口。这个 serial.write() 函数仍然是一个 for 循环。而且这个写入过程非常慢(16个字节超过0.02s)。如果 for 循环包含在 while True: 框架中,类似于:</p>


while True:
  Data = Ref_generation()
  Bytes_Full = Float_2_Bytes_List(Data)
  for ele in Bytes_Full:
    Serial.write(ele)  # VERY SLOW!!!
  sleep(0.001)

然后,由于循环周期远大于 0.001s,因此无法正确计算 Data。

简而言之,如何将快速计算算法与慢速 serial.wtite() 分开?我尝试了多线程,但不起作用。

任何帮助将不胜感激,非常感谢!

标签: pythonmultithreadingmultiprocessingrobotics

解决方案


您不需要利用多个 cpu 内核,您只需要等待串行端口...您的 CPU 将处于空闲状态,等待...产生新线程/进程以等待是浪费...

这就是为什么你应该尝试使用一些异步 IO 解决方案。

例如,使用https://github.com/pyserial/pyserial-asynciohttps://twistedmatrix.com/documents/16.1.0/api/twisted.internet.serialport.SerialPort.html

这些异步框架允许您注册事件并在它们完成时自动调用您的函数,所有这些都在单个线程/进程中

它们还允许您在您想要的时间安排活动。


推荐阅读