RabbitMQ上的计划Celery任务在指定的运行时间之后仍然未被确认

时间:2012-07-24 15:38:04

标签: python heroku rabbitmq celery django-celery

在使用Celery和RabbitMQ时,无法让计划任务在指定的将来时间运行。

使用RabbitMQ插件在Heroku服务器上使用Django。

问题:

有时候任务根本不会运行,有时它们会运行,但它们运行的​​时间会大幅度减少(例如一小时)。

未运行的示例任务:

当我尝试使用倒计时或ETA运行任务时,它实际上从未执行过。这是一个未运行的示例ETA任务:

>>> dummy_task.apply_async(eta=datetime.datetime.now() + timedelta(seconds=60))
<AsyncResult: 03001c1c-329e-46a3-8180-b115688e1865>

结果日志:

2012-07-24T14:03:08+00:00 app[scheduler.1]: [2012-07-24 10:03:08,909: INFO/MainProcess]
    Got task from broker: events.tasks.dummy_task[910ff406-d51c-4c29-bdd1-fec1a8168c12]     
    eta:[2012-07-24 10:04:08.819528+00:00]

一分钟后没有任何事情发生。我的Heroku RabbitMQ管理控制台中的unacknowledged message count增加1并保持不变。

这有效:

我确保芹菜任务已正确注册,RabbitMQ配置为通过验证我可以使用delay()方法运行任务来接受任务。

>>> dummy_task.delay()
<AsyncResult: 1285ff04-bccc-46d9-9801-8bc9746abd1c>

结果日志:

2012-07-24T14:29:26+00:00 app[worker.1]: [2012-07-24 10:29:26,513: INFO/MainProcess] 
    Got task from broker: events.tasks.dummy_task[1285ff04-bccc-46d9-9801-8bc9746abd1c]

....

2012-07-24T14:29:26+00:00 app[worker.1]: [2012-07-24 10:29:26,571: INFO/MainProcess] 
    Task events.tasks.dummy_task[1285ff04-bccc-46d9-9801-8bc9746abd1c] 
    succeeded in 0.0261888504028s: None

对此的任何帮助将不胜感激。非常感谢!

1 个答案:

答案 0 :(得分:1)

我有点想通了。因为我在调试,所以我自然地将任务设置为在5或10分钟内运行。我不确切知道为什么,但我的设置很难处理这个问题。这就好像需要一定的时间来处理和排队任务。无论如何,预先安排超过一个小时左右的任务已正确运行。