1

我将 Celery 与我的 Django 应用程序一起使用,并且在大多数情况下,事情进展顺利。作为参考,这是我的 celerybeat 配置:

CELERYBEAT_SCHEDULE = {
    'update-every-5-secs': {
        'task': 'app1.tasks.task1',
        'schedule': timedelta(seconds=5),
        'args': (),
    },
    'archive-request-records-every-hour': {
        'task': 'app0.tasks.archive_requests',
        'schedule': crontab(minute=0, hour='*/1'),
        'args': (),
    },
    'push-ios-background-every-5-minutes': {
        'task': 'app0.tasks.push_ios_background',
        'schedule': crontab(minute='*/5'),
        'args': (),
    },
}

我注意到每 1-2 天,它会随机完全不同步。例如,每 5 分钟运行一次的最后一个条目通常运行如下:1:00、1:05、1:10、1:15 等。

这是它今天早上所做的:7:30、7: 35、7:40、7:46、7:50、8:03、8:16、8:32、8: 50、9 : 13、9: 21, 9:26, 9:29, 9:32, 9:38, 9:47, 9:59, 10:08, 10:22, 10:24, 10:24, 10:24, 10:24, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:25, 10:26, 10: 26、10 :30、10:35、10:40...

它几乎看起来不同步,试图一次弥补它,然后重新恢复。起初我以为这只是侥幸,但它发生得太频繁了。我有这方面的关键任务流程,需要按时运行。

有什么办法可以防止这种情况发生吗?似乎人们在 Celery 上取得了巨大的成功,所以我真的很困惑。

4

1 回答 1

2

你的设置看起来不错。

是不是您正在衡量任务何时完成,而不是何时开始?可能是您的任务需要很长时间甚至失败,因此不会被报告。

crontab根据我的经验,它是低级别且相当准确的,因此我会先检查您的日志记录工具。

更新

另一个调试解决方案是开始对任务实施时间限制,以确保它们不会被锁定太久。http://docs.celeryproject.org/en/latest/userguide/workers.html#time-limits

CELERYD_TASK_TIME_LIMIT = 300
CELERYD_TASK_SOFT_TIME_LIMIT = 260
于 2014-07-27T17:46:46.927 回答