memdebug.py 945 B

12345678910111213141516171819202122232425262728293031323334
  1. """
  2. MemoryDebugger extension
  3. See documentation in docs/topics/extensions.rst
  4. """
  5. import gc
  6. import six
  7. from scrapy import signals
  8. from scrapy.exceptions import NotConfigured
  9. from scrapy.utils.trackref import live_refs
  10. class MemoryDebugger(object):
  11. def __init__(self, stats):
  12. self.stats = stats
  13. @classmethod
  14. def from_crawler(cls, crawler):
  15. if not crawler.settings.getbool('MEMDEBUG_ENABLED'):
  16. raise NotConfigured
  17. o = cls(crawler.stats)
  18. crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)
  19. return o
  20. def spider_closed(self, spider, reason):
  21. gc.collect()
  22. self.stats.set_value('memdebug/gc_garbage_count', len(gc.garbage), spider=spider)
  23. for cls, wdict in six.iteritems(live_refs):
  24. if not wdict:
  25. continue
  26. self.stats.set_value('memdebug/live_refs/%s' % cls.__name__, len(wdict), spider=spider)