执行命令 celery -A app.celery beat -l info
从celery.__main__方法开始执行,经过一系列参数处理,最终会走到celery.apps.beat:Beat => celery.beat:Service,获取到实例Service后,执行核心方法service.start(),代码如下:
def start(self, embedded_process=False):
info('beat: Starting...')
debug('beat: Ticking with max interval->%s',
humanize_seconds(self.scheduler.max_interval))
signals.beat_init.send(sender=self)
if embedded_process:
signals.beat_embedded_init.send(sender=self)
platforms.set_process_title('celery beat')
try:
while not self._is_shutdown.is_set():
interval = self.scheduler.tick() # 核心中的核心方法,返回下一个最近任务还剩多少时间
if interval and interval > 0.0:
debug('beat: Waking up %s.',
humanize_seconds(interval, prefix='in '))
time.sle