def execute(self, url, is_inc=False):
        failed = False
        
        while not self.nonsuspend.wait(5):
            continue
        if self.stopped.is_set():
            return
        
        if self.logger:
            self.logger.info('get url: %s' % str(url))
        
        self.processing_inc = is_inc
        rates = 0
        span = 0.0
        parser_cls, options = self.job_desc.url_patterns.get_parser(url, options=True)
        if parser_cls is not None:
            if rates == 0:
                rates, span = self.speed_client.require(
                    DEFAULT_SPEEED_REQUIRE_SIZE)
            if rates == 0:
                if self.stopped.wait(5):
                    return
            rates -= 1
            
            try:
                next_urls = self._parse_with_process_exception(
                    parser_cls, options, url)
                next_urls = list(self.job_desc.url_patterns.matches(next_urls))
                
                if next_urls:
                    self.mq.put(next_urls)
                if hasattr(self.opener, 'close'):
                    self.opener.close()
                    
                self.stopped.wait(span)
            except UnitRetryFailed:
                failed = True
        
        if self.settings.job.inc is True:
            self.mq.put_inc(url)
        if not failed:
            self._finish(url)
        if failed:
            return url
dataset/ETHPy150Open chineking/cola/cola/job/executor.py/UrlExecutor.execute/original