Подтвердить что ты не робот

Использование Python/PySerial и процессора

Я создал script для мониторинга вывода последовательного порта, который получает 3-4 строки данных каждые полчаса - script работает отлично и захватывает все, что выходит из порта, который в конце день имеет значение...

Однако мне кажется, что использование процессора кажется довольно высоким для программы, которая контролирует только один последовательный порт, 1 ядро ​​всегда будет на 100% использовать, пока этот script запущен.

В основном я использую модифицированную версию кода в этом вопросе: pyserial - Как читать последнюю строку, отправленную с серийного устройства

Я пробовал опрос функции inWaiting() через регулярные промежутки времени и спящий, когда inWaiting() равен 0 - я пробовал интервалы с 1 секунды до 0,001 секунды (в основном, как можно чаще, без подъема использование процессора) - это удастся захватить первую строку, но, похоже, пропустит остальную часть данных.

Настройка тайм-аута последовательного порта, похоже, не влияет на использование процессора, а также не помещает функцию прослушивания в собственный поток (не то, что я действительно ожидал разницы, но это стоило попробовать).

  • Должен ли python/pyserial использовать этот много процессор? (это кажется излишним)
  • Я трачу свое время на этот квест/Должен ли я просто укусить пулю и запланировать script, чтобы спать в течение периодов, которые, как я знаю, не будут поступать данными?
4b9b3361

Ответ 1

Возможно, вы можете выполнить блокирующий вызов read(1), и когда ему удастся использовать read(inWaiting()), чтобы получить нужное количество оставшихся байтов.

Ответ 2

Было бы лучше решение системного стиля? Создать python script и выполнить его через Cron/Scheduled Task?

pySerial не должен использовать такой процессор, но если он просто сидит там в течение часа, я вижу, как это может произойти. Сон может быть лучшим вариантом в сочетании с периодическим пробуждением и опросами.