heartbeat.py 939 B

1234567891011121314151617181920212223242526272829303132
  1. from celery.worker.state import SOFTWARE_INFO
  2. class Heart(object):
  3. """Timer sending heartbeats at regular intervals.
  4. :param timer: Timer instance.
  5. :param eventer: Event dispatcher used to send the event.
  6. :keyword interval: Time in seconds between heartbeats.
  7. Default is 30 seconds.
  8. """
  9. def __init__(self, timer, eventer, interval=None):
  10. self.timer = timer
  11. self.eventer = eventer
  12. self.interval = interval or 30
  13. self.tref = None
  14. def _send(self, event):
  15. return self.eventer.send(event, **SOFTWARE_INFO)
  16. def start(self):
  17. self._send("worker-online")
  18. self.tref = self.timer.apply_interval(self.interval * 1000.0,
  19. self._send, ("worker-heartbeat", ))
  20. def stop(self):
  21. if self.tref is not None:
  22. self.timer.cancel(self.tref)
  23. self.tref = None
  24. self._send("worker-offline")