Celery和Celerybeat随机开始表演时髦

时间:2014-07-27 16:57:38

标签: django celery django-celery cron-task celerybeat

我正在使用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上取得了很大的成功,所以我真的很困惑。

1 个答案:

答案 0 :(得分:1)

您的设置看起来不错。

你是在测量任务何时完成,而不是在它开始时测量?可能是您的任务需要很长时间甚至失败,因此无法报告。

crontab水平较低且相当准确,因此我首先检查您的日志工具。

<强>更新

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

CELERYD_TASK_TIME_LIMIT = 300
CELERYD_TASK_SOFT_TIME_LIMIT = 260