heartbeat.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # -*- coding: utf-8 -*-
  2. """
  3. celery.worker.heartbeat
  4. ~~~~~~~~~~~~~~~~~~~~~~~
  5. This is the internal thread that sends heartbeat events
  6. at regular intervals.
  7. :copyright: (c) 2009 - 2011 by Ask Solem.
  8. :license: BSD, see LICENSE for more details.
  9. """
  10. from __future__ import absolute_import
  11. from .state import SOFTWARE_INFO
  12. class Heart(object):
  13. """Timer sending heartbeats at regular intervals.
  14. :param timer: Timer instance.
  15. :param eventer: Event dispatcher used to send the event.
  16. :keyword interval: Time in seconds between heartbeats.
  17. Default is 30 seconds.
  18. """
  19. def __init__(self, timer, eventer, interval=None):
  20. self.timer = timer
  21. self.eventer = eventer
  22. self.interval = interval or 30
  23. self.tref = None
  24. def _send(self, event):
  25. return self.eventer.send(event, **SOFTWARE_INFO)
  26. def start(self):
  27. self._send("worker-online")
  28. self.tref = self.timer.apply_interval(self.interval * 1000.0,
  29. self._send, ("worker-heartbeat", ))
  30. def stop(self):
  31. if self.tref is not None:
  32. self.timer.cancel(self.tref)
  33. self.tref = None
  34. self._send("worker-offline")