code: def get_global_tor_instance(reactor,
                              control_port=None,
                              progress_updates=None,
                              _tor_launcher=None):
      
      global _global_tor
      global _global_tor_lock
      yield _global_tor_lock.acquire()
  
      if _tor_launcher is None:
          # XXX :( mutual dependencies...really get_global_tor_instance
          # should be in controller.py if it's going to return a Tor
          # instance.
          from .controller import launch
          _tor_launcher = launch
  
      try:
          if _global_tor is None:
              _global_tor = yield _tor_launcher(reactor, progress_updates=progress_updates)
  
          else:
              config = yield _global_tor.get_config()
              already_port = config.ControlPort
              if control_port is not None and control_port != already_port:
                  raise RuntimeError(
                      "ControlPort is already '{}', but you wanted '{}'",
                      already_port,
                      control_port,
                  )
  
          defer.returnValue(_global_tor)
      finally:
          _global_tor_lock.release()
docs: Normal users shouldn't need to call this; use
      TCPHiddenServiceEndpoint::system_tor instead.
  
      :return Tor: a 'global to this Python process' instance of
          Tor. There isn't one of these until the first time this method
          is called. All calls to this method return the same instance.