code: def read(self, length, timeout):
      
      self._read_messages_until_true(
          lambda: self._buffer_size and self._buffer_size >= length, timeout)
  
      with self._read_buffer_lock:
        data, push_back = ''.join(self._read_buffer), ''
        if length:
          data, push_back = data[:length], data[length:]
        self._read_buffer.clear()
        self._buffer_size = len(push_back)
        if push_back:
          self._read_buffer.appendleft(push_back)
      return data
docs: Read 'length' bytes from this stream transport.
  
      Args:
        length: If not 0, read this many bytes from the stream, otherwise read all
          available data (at least one byte).
        timeout: timeouts.PolledTimeout to use for this read operation.
  
      Returns:
        The bytes read from this stream.