Usando PySerial, ¿es posible esperar datos?

Tengo un programa de Python que está leyendo datos de un puerto serie a través delPySerial módulo. Las dos condiciones que debo tener en cuenta son: no sé cuánta información se generará, y no sé cuándo esperar datos.

En base a esto, he ideado los siguientes fragmentos de código:

#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

Por lo tanto, este código se repetirá para obtener datos del puerto serie. Obtendremos hasta 500 caracteres para almacenar los datos, luego alertaremos al bucle principal estableciendo una bandera. Si no hay datos presentes, volveremos a dormir y esperaremos.

El código está funcionando, pero no me gusta el tiempo de espera de 5s. Lo necesito porque no sé cuántos datos puedo esperar, pero no me gusta que se despierte cada 5 segundos, incluso cuando no hay datos presentes.

¿Hay alguna forma de verificar cuándo los datos están disponibles antes de hacer laread? Estoy pensando algo como elselect comando en linux.

EDITAR:
Sólo pensé en señalar que encontré elinWaiting() Método, pero en realidad eso parece que solo cambia mi "reposo" a una encuesta, así que eso no es lo que quiero aquí. Solo quiero dormir hasta que entren los datos, luego ve a buscarlos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta