我们的调度堆栈包含一个带有djCelery 3.1.9和RabbitMQ的Django应用程序,并在Heroku上托管有3个Celery工作器dynos和一个调度程序。我们已将计划的任务分组为在不同时间一起运行。我们发现某些任务没有与该组一起执行。
示例:
根据芹菜检查计划,此任务计划于2014年4月3日19:40 UTC运行:
{u'eta': u'2014-04-03T19:40:00+00:00', u'priority': 6, u'request': {u'name': u'api.tasks.close_event', u'time_start': None, u'id': u'c97813af-b070-4b67-8604-da572478e43e', u'kwargs': u'{}', u'args': u'[1002304]', u'delivery_info': {u'exchange': u'celery', u'redelivered': True, u'routing_key': u'celery', u'priority': None}, u'acknowledged': False, u'hostname': u'celery@3508e5c8-c6f7-46cb-be52-79405e9a5112', u'worker_pid': None}}
同时安排了82个其他任务。
Apr 02 16:26:13 ogs-network app/worker.3: [2014-04-02 23:26:13,658: INFO/MainProcess] Received task: api.tasks.close_event[c97813af-b070-4b67-8604-da572478e43e] eta:[2014-04-03 19:40:00+00:00]
Apr 03 14:07:09 ogs-network app/worker.2: [2014-04-03 21:07:09,596: INFO/MainProcess] Received task: api.tasks.close_event[c97813af-b070-4b67-8604-da572478e43e] eta:[2014-04-03 19:40:00+00:00]
Apr 03 14:07:10 ogs-network app/worker.2: [2014-04-03 21:07:10,490: INFO/MainProcess] Task api.tasks.close_event[c97813af-b070-4b67-8604-da572478e43e] succeeded in 0.372298751958s: None
我们认为任务已经安排并被接受但未在预期时间运行。
我们使用的其他一些设置:
CELERY_ACKS_LATE = FALSE (default)
CELERYD_PREFETCH_MULTIPLIER = 4 (default)
CELERY_RESULT_BACKEND = "database"
寻找任何和所有的帮助。感谢您提前提供任何帮助。
===================================
更新:我们发现一个长期运行的任务干扰了排在后面的快速任务。由于长时间运行的任务,它们被安排重试并最终耗尽等待时间。通过将长时间运行的任务更改为更小的重复任务(它执行必须执行的操作然后重新安排),我们的问题似乎已经消失。如果问题出现,将再次发布 - 现在,我们将此标记为已解决。