docs: def execute(self, raise_on_error=True):
          "Execute all the commands in the current pipeline"
          stack = self.command_stack
          if not stack:
              return []
          execute = self._execute_pipeline
  
          conn = self.connection
          if not conn:
              conn = self.connection_pool.get_connection('batch')
              # assign to self.connection so reset() releases the connection
              # back to the pool after we're done
              self.connection = conn
  
          try:
              return execute(conn, stack, raise_on_error)
          except ConnectionError:
              conn.disconnect()
              return execute(conn, stack, raise_on_error)
          finally:
              self.reset()