Страницы

Поиск по вопросам

среда, 13 марта 2019 г.

COM Порт в python: как ждать данные, не нагружая CPU

Есть программа, которая принимает данные из COM порта. Возникла проблема, как заставить программу ждать данные и не выполняться дальше?
При использовании бесконечного цикла while, программа нагружает ЦП до 50%.
forchar = 0 idcom = []
ser = serial.Serial( port = 'COM2',\ baudrate=2400,\ parity=serial.PARITY_NONE,\ stopbits=serial.STOPBITS_ONE,\ bytesize=serial.EIGHTBITS,\ timeout=0)
print("connected to: " + ser.portstr) count=1
while True: for line in ser.readline(): forchar = forchar + 1 idcom.append(line) if forchar >= 13: break


Ответ

У вас порт настроен на неблокирующее чтение, так как установлен timeout=0, Либо уберите эту опцию, либо напишите timeout=None, тогда порт у вас будет ждать данные, до тех пор пока они не появятся.
Если же вам все таки нужно неблокирующее соединение, то в цикл while надо добавить небольшую задержку time.sleep, тогда нагрузка процессора уйдет.

Комментариев нет:

Отправить комментарий