Обработка сельдерея и нескольких пауков

Я использую scrapy, и я пытаюсь использовать сельдерей для управления несколькими пауками на одной машине. У меня есть проблема (немного сложно объяснить), что пауки умножаются -> это означает, что если мой первый паук запускается, а я запускаю второго, первый паук выполняется дважды.

Смотрите мой код здесь:

ProcessJob.py

class ProcessJob():
    def processJob(self, job):
        #update job
        mysql = MysqlConnector.Mysql()
        db = mysql.getConnection();
        cur = db.cursor(); 
        job.status = 1
        update = "UPDATE job SET status=1 WHERE id=" + str(job.id)
        cur.execute(update)
        db.commit()
        db.close()

        #Start new crawler
        configure_logging()
        webspider = spider.MySpider;   
        if job.ajax == 1:
            webspider.custom_settings = CrawlerSettings.ajax_settings;
        else:
            webspider.custom_settings = CrawlerSettings.normal_settings;
        crawler = UrlCrawlerScript(webspider, job)
        crawler.start()
        crawler.join()
        reactor.stop(0)


class UrlCrawlerScript(Process):
    def __init__(self, spider, job):
        Process.__init__(self)
        self.crawler = CrawlerRunner()
        self.crawler.crawl(spider, job=job)  

    def run(self):
        d = self.crawler.join()
        d.addBoth(lambda _: reactor.stop())       
        reactor.run(0)

И Паук:

def __init__(self, job):       
        self.job = job        
        #Get the hosts
        allowedDomainsPre = job.url.split(",")
        allowedDomains = []        
        for domains in allowedDomainsPre:
            parsed_uri = urlparse(domains)
            domain = '{uri.netloc}'.format(uri=parsed_uri)
            print domain
            allowedDomains.append(domain)

        self.allowed_domains = allowedDomains
        self.start_urls = allowedDomainsPre
        #Get job patterns
        jobPatterns = job.processing_patterns.split(",")
        allowedPatterns = []
        deniedPatterns = []
        for pattern in jobPatterns:
            if '-' in pattern:
                deniedPatterns.append(pattern.replace("-",""))
            else:
                allowedPatterns.append(pattern) 


        self._rules = [
            Rule(LinkExtractor(allow=(allowedPatterns), deny=(deniedPatterns)), callback=self.parse_items, follow=True)
                ]    
        self.name = job.id            

    def parse_items(self, response):           
        item = Item()
        item['html'] = response.body  
        item['url'] = response.url
        item['job_id'] = self.job.id
        return item

Что это значит: я получаю новые вакансии из своей базы данных (не в этом коде здесь - было бы слишком много). Затем я хочу их обработать (запустить паука). Как я уже сказал, проблема в том, что когда я выполняю два задания одновременно, первый паук «удваивается» (поэтому выполняется дважды параллельно).

Есть предложения, как это исправить? Возможно, снова проблема с реактором :(


person Fabian Lurz    schedule 16.11.2015    source источник