4

我不确定是否对 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 列出所有队列。

谁能解释我做错了什么或发生了什么?如果我完全忽略结果,为什么任务的状态取决于结果到期时间?

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

ps 我现在使用的是 Celery 3.0.23,但行为与 3.0.13 相同。

4

0 回答 0