我正在循环中读取串行字符串,并在等待下一个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()
答案 0 :(得分:0)
从我记得(因为我使用pyserial已经有一段时间了)我确信串口使用缓冲区,所以只要你的消息没有填满缓冲区,你就不应该丢失任何数据。
假设我正在查看右侧模块的文档,请参阅以下页面: [Pyserial docs] [1] http://pyserial.sourceforge.net/pyserial_api.html
提及输入和输出上的缓冲区。
因此,将睡眠放入程序时应该没有问题,因为缓冲区将收集数据,直到您阅读它为止。 (假设你的消息不够大而导致溢出)
詹姆斯