【问题标题】:scrapy: spider destructor (__del__) never executedscrapy:蜘蛛析构函数(__del__)从未执行
【发布时间】:2015-09-28 00:06:45
【问题描述】:

我创建了一个运行良好的scrapy spider(它会做应该做的事情),但是当完成工作时它不会执行析构函数代码(del

版本是: - 蟒蛇2.7.3 -scrapy 0.24.6 - Fedora 18

class MySpider(scrapy.Spider):
stuff
def __del__(self):
    stuff_1

MySpider 完成后如何执行我的“stuff-1”代码?

【问题讨论】:

    标签: python scrapy destructor scrapy-spider


    【解决方案1】:

    使用信号。特别是spider_closed信号:

    from scrapy import signals
    from scrapy.xlib.pydispatch import dispatcher
    
    class MySpider(scrapy.Spider):
        def __init__(self):
            dispatcher.connect(self.spider_closed, signals.spider_closed)
    
        def spider_closed(self, spider):
            stuff_1()
    

    【讨论】:

      【解决方案2】:

      @alecxe 的答案现在是deprecated

      请改用from_crawler class method

      
      class MySpider(scrapy.Spider):
          ...
          @classmethod
          def from_crawler(cls, crawler, *args, **kwargs):
              spider = super(MySpider, cls).from_crawler(crawler, *args, **kwargs)
              crawler.signals.connect(spider.spider_closed, signal=scrapy.signals.spider_closed)
              return spider
      
          def spider_closed(self, spider):
              spider.logger.info('Spider closed')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多