engine.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """Some debugging functions for working with the Scrapy engine"""
  2. from __future__ import print_function
  3. from time import time # used in global tests code
  4. def get_engine_status(engine):
  5. """Return a report of the current engine status"""
  6. tests = [
  7. "time()-engine.start_time",
  8. "engine.has_capacity()",
  9. "len(engine.downloader.active)",
  10. "engine.scraper.is_idle()",
  11. "engine.spider.name",
  12. "engine.spider_is_idle(engine.spider)",
  13. "engine.slot.closing",
  14. "len(engine.slot.inprogress)",
  15. "len(engine.slot.scheduler.dqs or [])",
  16. "len(engine.slot.scheduler.mqs)",
  17. "len(engine.scraper.slot.queue)",
  18. "len(engine.scraper.slot.active)",
  19. "engine.scraper.slot.active_size",
  20. "engine.scraper.slot.itemproc_size",
  21. "engine.scraper.slot.needs_backout()",
  22. ]
  23. checks = []
  24. for test in tests:
  25. try:
  26. checks += [(test, eval(test))]
  27. except Exception as e:
  28. checks += [(test, "%s (exception)" % type(e).__name__)]
  29. return checks
  30. def format_engine_status(engine=None):
  31. checks = get_engine_status(engine)
  32. s = "Execution engine status\n\n"
  33. for test, result in checks:
  34. s += "%-47s : %s\n" % (test, result)
  35. s += "\n"
  36. return s
  37. def print_engine_status(engine):
  38. print(format_engine_status(engine))