Scrapy扩展:不调用spider_closed

时间:2015-02-27 15:10:46

标签: python scrapy scrapyd

我有一个附加到spider_opened和spider_closed的扩展名。正确调用了spider_opened方法,但spider_closed方法却没有。我通过调用scrapyd取消端点来关闭蜘蛛。

class SpiderCtlExtension(object):

   @classmethod 
   def from_crawler(cls, crawler):
       ext = SpiderCtlExtension()

       ext.project_name = crawler.settings.get('BOT_NAME')
       crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened)
       crawler.signals.connect(ext.spider_closed, signal=signals.spider_closed)

       return ext

   def spider_opened(self, spider):
       sql = """UPDATE ctl_crawler
             SET status = 'RUNNING'
             WHERE jobid = '{}'  """.format(os.getenv("SCRAPY_JOB"))
       engine.execute(sql)

   def spider_closed(self,spider,reason):
       sql = """UPDATE ctl_crawler
             SET status = '{}'
             WHERE jobid = '{}'  """.format(reason.upper(),os.getenv("SCRAPY_JOB"))
       engine.execute(sql)

我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

这是一个(特定于Windows的)错误,请参阅我的错误报告https://github.com/scrapy/scrapyd/issues/83

原因是cancel方法的工作方式,不会调用spider进程中的shutdown处理程序。