python提升读取速度_如何提高PySerial读取速度

我目前正在建造一台使用Arduino Mega2560作为主控制器的机器。Arduino连接到over-serial,获取一个命令,执行它,每1毫秒吐出一堆测量数据。我有一个运行Python的Raspberry Pi,为用户提供一个良好的图形用户界面来发送命令,并以可读的形式显示数据。

我面临的问题是:Arduino能够每毫秒吐出15字节的数据(所以这仅仅是15kbyte/s),但是我运行的代码每10毫秒只能处理大约15字节的数据,所以是1.5kB/s

当我运行cat /dev/ttyACM0 > somefile时,我很好地看到了所有数据点。

我有以下精简的Python代码# Reset Arduino by starting serial

microprocBusy = True

serialPort = serial.Serial("/dev/ttyACM0", baudrate=460800, timeout=0)

time.sleep(0.22);

serialPort.setDTR(False);

time.sleep(0.22);

serialPort.setDTR(True);

time.sleep(0.10);

logfile = open(logfilenamePrefix + "_" + datetime.datetime.now().isoformat() + '.txt', 'a')

# Bootloader has some timeout, we need to wait for that

serialPort.flushInput()

while(serialPort.inWaiting() == 0):

time.sleep(0.05)

# Wait for welcome message

time.sleep(0.1)

logfile.write(serialPort.readline().decode('ascii'))

logfile.flush()

# Send command

serialPort.write((command + '\n').encode('ascii'))

# Now, receive data

while(True):

incomingData = serialPort.readline().decode('ascii')

logfile.write(incomingData)

logfile.flush()

if(incomingData[:5] == "FATAL" or incomingData[:6] == "HALTED" or incomingData[:5] == "RESET"):

break;

elif(incomingData[:6] == "RESULT"):

resultData = incomingData;

logfile.flush()

当我运行这个程序时,第一个~350个数据点出现,然后我看到一些损坏的数据,并错过了大约2000个数据点,然后我看到另外350个左右的数据点。在此过程中,CPU使用率为100%

怎么了?PySerial是否优化得很差,或者我的代码中是否遗漏了一些错误?我可以从Python运行cat /dev/ttyACM0 > somefile,然后读取该文件,但这并不是一个很好的解决方案,不是吗?

非常感谢:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值