pyserial / python и сбор данных в реальном времени - PullRequest
5 голосов
/ 03 октября 2011

У меня есть инфракрасная камера / трекер, с которой я общаюсь через последовательный порт. Я использую модуль pyserial, чтобы сделать это в данный момент. Камера обновляет положение отслеживаемого объекта с частотой 60 Гц. Чтобы определить положение отслеживаемого объекта, я выполняю один pyserial.write () и затем прослушиваю входящий ответ с pyserial.read (serialObj.inWaiting ()). Как только ответ / позиция получена, цикл while снова включается и так далее. Мой вопрос касается надежности и скорости такого подхода. Мне нужно, чтобы позиция была получена компьютером с частотой не менее 60 Гц (и тогда эта позиция будет отправлена ​​через UDP в ОС реального времени). Это то, на что способен Pyserial / Python, или я должен искать альтернативные подходы на основе Си?

Спасибо, Люк

Ответы [ 3 ]

1 голос
/ 03 октября 2011

Это скорее вопрос задержки, чем скорости.

Python всегда выполняет выделение и освобождение памяти, но если данные используются повторно, эта же память будет повторно использоваться библиотекой C. Таким образом, ОС (библиотека C / стек UDP / IP) будет иметь большее влияние, чем сам Python.

Я действительно думаю, что вы должны использовать последовательный порт на вашем компьютере с ОС RTOS и использовать код на C и предварительно выделенные буферы.

0 голосов
/ 03 октября 2011

Python должен поддерживать в порядке, но лучше всего следить за тем, сколько операций чтения в секунду вы получаете.Подсчитайте, сколько раз считывание завершалось каждую секунду, и, если это число слишком мало, запишите в журнал производительности или тому подобное.Вам также следует рассмотреть возможность отсоединения части ввода / вывода от остальной части вашей программы на Python (если она есть), поскольку вызовы чтения из pyserial блокируют.

0 голосов
/ 03 октября 2011

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

http://pypy.org/

...