Czy za pomocą PySerial można czekać na dane?

Mam program python, który odczytuje dane z portu szeregowego za pośrednictwemPySerial moduł. Dwa warunki, o których muszę pamiętać, to: nie wiem, ile danych powstanie i nie wiem, kiedy oczekiwać danych.

Na tej podstawie wymyśliłem następujące fragmenty kodu:

#Code from main loop, spawning thread and waiting for data
s = serial.Serial(5, timeout=5)  # Open COM5, 5 second timeout
s.baudrate = 19200

#Code from thread reading serial data
while 1:
  tdata = s.read(500)    # Read 500 characters or 5 seconds

  if(tdata.__len__() > 0):        #If we got data
    if(self.flag_got_data is 0):  #If it's the first data we recieved, store it
      self.data = tdata        
    else:                         #if it's not the first, append the data
      self.data += tdata
      self.flag_got_data = 1

Ten kod będzie zawsze zapętlać dane z portu szeregowego. Dostaniemy do 500 znaków zapisujących dane, a następnie powiadomimy główną pętlę, ustawiając flagę. Jeśli nie ma żadnych danych, po prostu wrócimy spać i zaczekamy.

Kod działa, ale nie podoba mi się limit czasu 5s. Potrzebuję go, ponieważ nie wiem, ile danych oczekiwać, ale nie podoba mi się, że budzi się co 5 sekund, nawet jeśli nie ma żadnych danych.

Czy jest jakiś sposób, aby sprawdzić, kiedy dane stają się dostępne przed wykonaniemread? Myślę o czymś takimselect polecenie w Linuksie.

EDYTOWAĆ:
Pomyślałem, że zauważyłem, że znalazłeminWaiting() metoda, ale tak naprawdę wydaje mi się, że po prostu zmienia mój „sen” w sondę, więc nie o to mi chodzi. Chcę tylko spać, dopóki nie pojawią się dane, a potem je zdobyć.

questionAnswers(3)

yourAnswerToTheQuestion