Ответ 1
Возможно, вы можете выполнить блокирующий вызов read(1)
, и когда ему удастся использовать read(inWaiting())
, чтобы получить нужное количество оставшихся байтов.
Я создал script для мониторинга вывода последовательного порта, который получает 3-4 строки данных каждые полчаса - script работает отлично и захватывает все, что выходит из порта, который в конце день имеет значение...
Однако мне кажется, что использование процессора кажется довольно высоким для программы, которая контролирует только один последовательный порт, 1 ядро всегда будет на 100% использовать, пока этот script запущен.
В основном я использую модифицированную версию кода в этом вопросе: pyserial - Как читать последнюю строку, отправленную с серийного устройства
Я пробовал опрос функции inWaiting() через регулярные промежутки времени и спящий, когда inWaiting() равен 0 - я пробовал интервалы с 1 секунды до 0,001 секунды (в основном, как можно чаще, без подъема использование процессора) - это удастся захватить первую строку, но, похоже, пропустит остальную часть данных.
Настройка тайм-аута последовательного порта, похоже, не влияет на использование процессора, а также не помещает функцию прослушивания в собственный поток (не то, что я действительно ожидал разницы, но это стоило попробовать).
Возможно, вы можете выполнить блокирующий вызов read(1)
, и когда ему удастся использовать read(inWaiting())
, чтобы получить нужное количество оставшихся байтов.
Было бы лучше решение системного стиля? Создать python script и выполнить его через Cron/Scheduled Task?
pySerial не должен использовать такой процессор, но если он просто сидит там в течение часа, я вижу, как это может произойти. Сон может быть лучшим вариантом в сочетании с периодическим пробуждением и опросами.