Ожидание данных по последовательному порту в течение определенного времени в Python
Я должен ждать определенного размера данных по последовательному порту в течение определенного времени. Если я получу меньше данных за это время, я бы хотел избежать чтения данных. Если я получу достаточно данных рано, то я бы хотел их прочитать и перестать ждать данные.
Мое текущее решение выглядит так:
serial.open()
start_time = time()
while serial.in_waiting < expected_data_size: # waiting certain size of data
if time_to_wait < time() - start_time: # time is expired
serial.close()
return
data = serial.read(expected_data_size)
serial.close()
Но я думаю, что это не очень хорошее решение, потому что сравнения (в блоках while и if) происходят много раз, пока они ожидают данные.
Посоветуйте, пожалуйста, как лучше реализовать это в Python 3. Для работы с последовательным портом я использую pySerial.
Заранее спасибо!
1 ответ
Вам не нужно изобретать новое колесо. 1) когда вы открываете порт, вы должны установить таймаут. 2) после того, как порт открыт, вы должны установить размер данных для чтения в "read" API.
API чтения вернется либо с размером данных, либо вернет меньше данных, если истечет время ожидания.
см. образец из документации:
>>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
... x = ser.read() # read one byte
... s = ser.read(10) # read up to ten bytes (timeout)