串行读取python的性能

时间:2014-07-16 09:21:30

标签: python serial-port raspberry-pi

我正在循环中读取串行字符串,并在等待下一个serial.read()时意识到处理器处于100%(RaspberryPI)。 我发现建议在这里和那里添加一些睡眠,但这样做可能会导致缺少串行数据。在理论上,我每隔5秒钟从序列中得到一个字符串,但可能会有点多或少,而不是我的控制。

有没有办法在python中更好地解决这个问题并减少处理器的使用?

#!/usr/bin/env python
import serial

ser = serial.Serial("/dev/ttyUSB0", 57600, timeout=0)

def sr():
    while True:
        for line in ser.read():
            try:
                response = ser.readlines(None)
                response = str(response)
                print response
            except:
                print datetime.datetime.now(), " No data from serial connection."

if __name__ == '__main__':
    sr
    ser.close()

1 个答案:

答案 0 :(得分:0)

从我记得(因为我使用pyserial已经有一段时间了)我确信串口使用缓冲区,所以只要你的消息没有填满缓冲区,你就不应该丢失任何数据。

假设我正在查看右侧模块的文档,请参阅以下页面: [Pyserial docs] [1] http://pyserial.sourceforge.net/pyserial_api.html

提及输入和输出上的缓冲区。

因此,将睡眠放入程序时应该没有问题,因为缓冲区将收集数据,直到您阅读它为止。 (假设你的消息不够大而导致溢出)

詹姆斯