code: def start(self, acceptor=None, wrapper=None):
          
  
          # Don't allow a double-start
          if self.running:
              raise ValueError("TendrilManager already running")
  
          # Look out for conflicts
          if self._manager_key in self._running_managers:
              raise ValueError("Identical TendrilManager already exists")
  
          # In a moment, we will begin running
          self.running = True
          self._local_addr = None
          self._local_addr_event.clear()
  
          # Add ourself to the dictionary of running managers
          self._running_managers[self._manager_key] = self
  
          # Start the listening thread
          self._listen_thread = gevent.spawn(self.listener, acceptor,
                                             wrapper)
  
          # Make sure to reset running if it exits
          self._listen_thread.link(self.stop)
docs: Starts the TendrilManager.
  
          :param acceptor: If given, specifies a callable that will be
                           called with each newly received Tendril;
                           that callable is responsible for initial
                           acceptance of the connection and for setting
                           up the initial state of the connection.  If
                           not given, no new connections will be
                           accepted by the TendrilManager.
          :param wrapper: A callable taking, as its first argument, a
                          socket.socket object.  The callable must
                          return a valid proxy for the socket.socket
                          object, which will subsequently be used to
                          communicate on the connection.
  
          For passing extra arguments to the acceptor or the wrapper,
          see the ``TendrilPartial`` class; for chaining together
          multiple wrappers, see the ``WrapperChain`` class.