code: def fetcher(ctx, xmlrpc, xmlrpc_host, xmlrpc_port, poolsize, proxy, user_agent,
              timeout, phantomjs_endpoint, puppeteer_endpoint, splash_endpoint, fetcher_cls,
              async_mode=True, get_object=False, no_input=False):
      
      g = ctx.obj
      Fetcher = load_cls(None, None, fetcher_cls)
  
      if no_input:
          inqueue = None
          outqueue = None
      else:
          inqueue = g.scheduler2fetcher
          outqueue = g.fetcher2processor
      fetcher = Fetcher(inqueue=inqueue, outqueue=outqueue,
                        poolsize=poolsize, proxy=proxy, async_mode=async_mode)
      fetcher.phantomjs_proxy = phantomjs_endpoint or g.phantomjs_proxy
      fetcher.puppeteer_proxy = puppeteer_endpoint or g.puppeteer_proxy
      fetcher.splash_endpoint = splash_endpoint
      if user_agent:
          fetcher.user_agent = user_agent
      if timeout:
          fetcher.default_options = copy.deepcopy(fetcher.default_options)
          fetcher.default_options['timeout'] = timeout
  
      g.instances.append(fetcher)
      if g.get('testing_mode') or get_object:
          return fetcher
  
      if xmlrpc:
          utils.run_in_thread(fetcher.xmlrpc_run, port=xmlrpc_port, bind=xmlrpc_host)
      fetcher.run()
docs: Run Fetcher.