gpt4 book ai didi

python - PySerial readlines() 消耗的 CPU 时间是 read() 的 25 倍

转载 作者:行者123 更新时间:2023-12-04 01:02:28 28 4
gpt4 key购买 nike

我正在使用 pyserial 通过串行端口读取恒定的数据流:

import serial
s = serial.Serial('/dev/ttyACM0', 9600)

如果我使用 .read 方法,就像这样

while True:
print(s.read(1000))

它消耗大约 1-2% 的 CPU

但如果我开始将它们放在一个列表中,这样会更方便

while True:
print(s.readlines(1000))

CPU 使用率突然飙升至 50%,这似乎有点不合理,只是在新行中拆分了输出差异。

我是不是做错了什么,有没有办法让 readlines() 方法更节省地使用 CPU?

谢谢

最佳答案

我的猜测是 readlinesreadline 忙于轮询串行行以获取新字符以满足您获取完整行(或多行)的请求,而 .read 只会在确实有新数据时读取并返回。您可能必须自己实现缓冲和拆分到行(代码未经测试,因为我现在在串行线上没有任何东西:-)):

import serial


def read_lines(s, sep=b"\n"):
buffer = b""
while True:
buffer += s.read(1000)
while sep in buffer:
line, _, buffer = buffer.partition(sep)
yield line


s = serial.Serial("/dev/ttyACM0", 9600)

for line in read_lines(s):
print(line)

关于python - PySerial readlines() 消耗的 CPU 时间是 read() 的 25 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67820228/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com