code: def __crawler_start(self):
          
  
          try:
              self.__options.callbacks.crawler_before_start()
          except Exception as e:
              print(e)
              print(traceback.format_exc())
  
          self.__spawn_new_requests()
  
          while not self.__stopped:
              if self.__should_stop:
                  self.__crawler_stop()
  
              if self.__should_spawn_new_requests:
                  self.__spawn_new_requests()
  
              time.sleep(0.1)
docs: Spawn the first X queued request, where X is the max threads option.
  
          Note:
              The main thread will sleep until the crawler is finished. This enables
              quiting the application using sigints (see http://stackoverflow.com/a/11816038/2491049).
  
          Note:
              `__crawler_stop()` and `__spawn_new_requests()` are called here on the main thread to
              prevent thread recursion and deadlocks.