Added MEMUSAGE_CHECK_INTERVAL_SECONDS to Memory usage extension options.

Kept the default as it was, at 60.0 seconds. But added a setting to
allow this to be changed as desired.
This commit is contained in:
Chris Nilsson 2015-06-06 00:39:14 +10:00
parent d9bcd48606
commit eae25a04d9
3 changed files with 19 additions and 3 deletions

View File

@ -222,6 +222,7 @@ can be configured with the following settings:
* :setting:`MEMUSAGE_WARNING_MB`
* :setting:`MEMUSAGE_NOTIFY_MAIL`
* :setting:`MEMUSAGE_REPORT`
* :setting:`MEMUSAGE_CHECK_INTERVAL_SECONDS`
Memory debugger extension
~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -711,6 +711,20 @@ Scrapy (if MEMUSAGE_ENABLED is True). If zero, no check will be performed.
See :ref:`topics-extensions-ref-memusage`.
.. setting:: MEMUSAGE_CHECK_INTERVAL_SECONDS
MEMUSAGE_CHECK_INTERVAL_SECONDS
-------------------------------
Default: ``60.0``
Scope: ``scrapy.extensions.memusage``
The frequence which the current memory usage will be checked against the
limits set by :setting:`MEMUSAGE_LIMIT_MB` and :setting:`MEMUSAGE_WARNING_MB`.
See :ref:`topics-extensions-ref-memusage`.
.. setting:: MEMUSAGE_NOTIFY_MAIL
MEMUSAGE_NOTIFY_MAIL

View File

@ -36,6 +36,7 @@ class MemoryUsage(object):
self.limit = crawler.settings.getint('MEMUSAGE_LIMIT_MB')*1024*1024
self.warning = crawler.settings.getint('MEMUSAGE_WARNING_MB')*1024*1024
self.report = crawler.settings.getbool('MEMUSAGE_REPORT')
self.check_interval = crawler.settings.getfloat('MEMUSAGE_CHECK_INTERVAL_SECONDS', 60.0)
self.mail = MailSender.from_settings(crawler.settings)
crawler.signals.connect(self.engine_started, signal=signals.engine_started)
crawler.signals.connect(self.engine_stopped, signal=signals.engine_stopped)
@ -56,15 +57,15 @@ class MemoryUsage(object):
self.tasks = []
tsk = task.LoopingCall(self.update)
self.tasks.append(tsk)
tsk.start(60.0, now=True)
tsk.start(self.check_interval, now=True)
if self.limit:
tsk = task.LoopingCall(self._check_limit)
self.tasks.append(tsk)
tsk.start(60.0, now=True)
tsk.start(self.check_interval, now=True)
if self.warning:
tsk = task.LoopingCall(self._check_warning)
self.tasks.append(tsk)
tsk.start(60.0, now=True)
tsk.start(self.check_interval, now=True)
def engine_stopped(self):
for tsk in self.tasks: