MCPcopy
hub / github.com/scrapy/scrapy / _check_limit

Method _check_limit

scrapy/extensions/memusage.py:104–134  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

102 self.crawler.stats.max_value("memusage/max", self.get_virtual_size())
103
104 def _check_limit(self) -> None:
105 assert self.crawler.engine
106 assert self.crawler.stats
107 peak_mem_usage = self.get_virtual_size()
108 if peak_mem_usage > self.limit:
109 self.crawler.stats.set_value("memusage/limit_reached", 1)
110 mem = self.limit / 1024 / 1024
111 logger.error(
112 "Memory usage exceeded %(memusage)dMiB. Shutting down Scrapy...",
113 {"memusage": mem},
114 extra={"crawler": self.crawler},
115 )
116 if self.notify_mails:
117 subj = (
118 f"{self.crawler.settings['BOT_NAME']} terminated: "
119 f"memory usage exceeded {mem}MiB at {socket.gethostname()}"
120 )
121 self._send_report(self.notify_mails, subj)
122 self.crawler.stats.set_value("memusage/limit_notified", 1)
123
124 if self.crawler.engine.spider is not None:
125 _schedule_coro(
126 self.crawler.engine.close_spider_async(reason="memusage_exceeded")
127 )
128 else:
129 _schedule_coro(self.crawler.stop_async())
130 else:
131 logger.info(
132 "Peak memory usage is %(virtualsize)dMiB",
133 {"virtualsize": peak_mem_usage / 1024 / 1024},
134 )
135
136 def _check_warning(self) -> None:
137 if self.warned: # warn only once

Callers

nothing calls this directly

Calls 8

get_virtual_sizeMethod · 0.95
_send_reportMethod · 0.95
_schedule_coroFunction · 0.90
errorMethod · 0.80
infoMethod · 0.80
set_valueMethod · 0.45
close_spider_asyncMethod · 0.45
stop_asyncMethod · 0.45

Tested by

no test coverage detected