heartbeat.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """
  2. celery.worker.heartbeat
  3. =======================
  4. This is an internal thread that sends heartbeat events
  5. at recurring intervals.
  6. """
  7. from __future__ import absolute_import
  8. from .state import SOFTWARE_INFO
  9. __all__ = ["Heart"]
  10. class Heart(object):
  11. """Timer sending heartbeats at regular intervals.
  12. :param timer: Timer instance.
  13. :param eventer: Event dispatcher used to send the event.
  14. :keyword interval: Time in seconds between heartbeats.
  15. Default is 30 seconds.
  16. """
  17. def __init__(self, timer, eventer, interval=None):
  18. self.timer = timer
  19. self.eventer = eventer
  20. self.interval = interval or 30
  21. self.tref = None
  22. def _send(self, event):
  23. return self.eventer.send(event, **SOFTWARE_INFO)
  24. def start(self):
  25. self._send("worker-online")
  26. self.tref = self.timer.apply_interval(self.interval * 1000.0,
  27. self._send, ("worker-heartbeat", ))
  28. def stop(self):
  29. if self.tref is not None:
  30. self.timer.cancel(self.tref)
  31. self.tref = None
  32. self._send("worker-offline")