Celery任务不使用RabbitMQ在Heroku上执行

时间:2014-04-04 02:36:26

标签: django heroku rabbitmq celery

我们的调度堆栈包含一个带有djCelery 3.1.9和RabbitMQ的Django应用程序,并在Heroku上托管有3个Celery工作器dynos和一个调度程序。我们已将计划的任务分组为在不同时间一起运行。我们发现某些任务没有与该组一起执行。

示例:

  1. 根据芹菜检查计划,此任务计划于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}}
  2. 同时安排了82个其他任务。

  3. 每项任务大约需要1秒钟才能运行。
  4. 在83项任务中,29项没有运行。
  5. 在19:59搜索芹菜检查计划输出表明该任务已不在计划中。
  6. heroku日志显示以下内容(本地时区为PST,所以16:26:13是UTC时间23:26:13)。
  7. 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]

    1. 因此任务已安排但未在预期时间运行。
    2. 在太平洋标准时间14:07:00(UTC时间21:07:00),工作人员重新启动并执行任务。来自heroku日志:
    3. 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"

      寻找任何和所有的帮助。感谢您提前提供任何帮助。

      ===================================

      更新:我们发现一个长期运行的任务干扰了排在后面的快速任务。由于长时间运行的任务,它们被安排重试并最终耗尽等待时间。通过将长时间运行的任务更改为更小的重复任务(它执行必须执行的操作然后重新安排),我们的问题似乎已经消失。如果问题出现,将再次发布 - 现在,我们将此标记为已解决。

0 个答案:

没有答案