你正在阅读 Celery 3.1 的文档。开发版本文档见: 此处.
# -*- coding: utf-8 -*-
"""
celery.worker.heartbeat
~~~~~~~~~~~~~~~~~~~~~~~
This is the internal thread that sends heartbeat events
at regular intervals.
"""
from __future__ import absolute_import
from .state import SOFTWARE_INFO, active_requests, total_count
[文档]class Heart(object):
"""Timer sending heartbeats at regular intervals.
:param timer: Timer instance.
:param eventer: Event dispatcher used to send the event.
:keyword interval: Time in seconds between heartbeats.
Default is 30 seconds.
"""
def __init__(self, timer, eventer, interval=None):
self.timer = timer
self.eventer = eventer
self.interval = float(interval or 5.0)
self.tref = None
# Make event dispatcher start/stop us when it's
# enabled/disabled.
self.eventer.on_enabled.add(self.start)
self.eventer.on_disabled.add(self.stop)
def _send(self, event):
return self.eventer.send(event, freq=self.interval,
active=len(active_requests),
processed=sum(total_count.itervalues()),
**SOFTWARE_INFO)
[文档] def start(self):
if self.eventer.enabled:
self._send('worker-online')
self.tref = self.timer.apply_interval(
self.interval * 1000.0, self._send, ('worker-heartbeat', ),
)
[文档] def stop(self):
if self.tref is not None:
self.timer.cancel(self.tref)
self.tref = None
if self.eventer.enabled:
self._send('worker-offline')