虽然调用了update_state(),但是使用ignore_result设置为True时未更新Celery任务状态

时间:2013-10-10 22:21:17

标签: python celery

我不确定是否有什么东西让我误解了Celery的结果后端设置,但这是我面临的问题:我有一堆任务,我对他们的结果不感兴趣,但我确实想检查在他们的状态不时。 因此我设置了:

ignore_result = True

尽管有这样的设置,似乎如果我将结果后端配置为使用AMQP,结果队列仍在创建 - 每个任务一个 - 为什么? 所以我尝试通过设置确保我不会同时拥有太多(结果)队列(这会影响RabbitMQ的性能):

CELERY_TASK_RESULT_EXPIRES = 60

奇怪的是,如果我不设法检查:

AsyncResult(task_id).state
在任务完成后的前60秒内,任务的状态将永远是PENDING,即使对于某些任务我手动调用

update_state(state='SUCCESS') 

在任务中。更奇怪的是,每当我尝试获取任务状态时,尽管所有状态都是PENDING(尽管它们应该是FINISHED_STATES之一),但结果队列重新出现在队列列表中,但任务状态永远不会改变 - 我在检查任务状态之前和之后使用rabbitmqadmin列出所有队列。

有人可以解释一下我做错了什么或发生了什么事吗? 如果我完全忽略结果,为什么任务的状态取决于结果到期时间?

如果我想忽略任务的结果,但仍能检查任务的状态,我应该使用哪些设置?

P.S。我现在正在使用Celery 3.0.23,但行为与3.0.13相同。

0 个答案:

没有答案