code: def spawn_watcher(self, label, target=None, eternal=False):
          
  
          if label not in self._sources:
              raise YapconfSourceError(
                  'Cannot watch %s no source named %s' % (label, label)
              )
  
          current_config = self._sources[label].get_data()
          handler = ConfigChangeHandler(current_config, self, target)
          return self._sources[label].watch(handler, eternal)
docs: Spawns a config watcher in a separate daemon thread.
  
          If a particular config value changes, and the item has a
          ``watch_target`` defined, then that method will be called.
  
          If a ``target`` is passed in, then it will call the ``target``
          anytime the config changes.
  
          Args:
              label (str): Should match a label added through ``add_source``
              target (func): Should be a function that takes two arguments,
              the old configuration and the new configuration.
              eternal (bool): Determines if watcher threads should be restarted
              if they die.
  
          Returns:
              The thread that was spawned.