code: def _flusher_loop(self):
          
          while True:
              pending = []
              pending_size = 0
              try:
                  # Block and wait for the flusher to be kicked
                  yield self._flush_queue.get()
  
                  # Check whether we should bail first
                  if not self.is_connected or self.is_connecting or self.io.closed():
                      break
  
                  # Flush only when we actually have something in buffer...
                  if self._pending_size > 0:
                      cmds = b''.join(self._pending)
  
                      # Reset pending queue and store tmp in case write fails
                      self._pending, pending = [], self._pending
                      self._pending_size, pending_size = 0, self._pending_size
                      yield self.io.write(cmds)
              except tornado.iostream.StreamBufferFullError:
                  # Acumulate as pending data size and flush when possible.
                  self._pending = pending + self._pending
                  self._pending_size += pending_size
              except tornado.iostream.StreamClosedError as e:
                  self._pending = pending + self._pending
                  self._pending_size += pending_size
                  yield self._process_op_err(e)
docs: Coroutine which continuously tries to consume pending commands
          and then flushes them to the socket.