使用自定义状态时任务状态未更新

0 投票
2 回答
727 浏览
提问于 2025-04-16 12:08

我有一个这样的任务:

@task
def test():
    time.sleep(10)
    test.update_state(state="PROGRESS")
    time.sleep(10)
    return "done"

然后我运行这个:

>>> from celery.execute import send_task
>>> t = send_task("testcelery.test")
>>> t.state
'PENDING'
>>> t.state
'PROGRESS'

我可以在工作进程中看到任务已经完成:

[2011-02-19 20:18:43,851: INFO/MainProcess] 任务 testcelery.test[7598b170-2877-4d76-89a0-9bcc4c9f877e] 在 20.0225799084 秒内成功完成: '完成'

但是 t.state 的状态从进行中(PROGRESS)一直没有变成成功(SUCCESS)。我哪里做错了?

2 个回答

0

我觉得设置了 CELERY_IGNORE_RESULT 这个选项会导致这种情况。那什么是 t.ignore_result 呢?如果它是对的,那就要么改一下它,要么改一下默认设置。如果你想每次都查看结果,那改变 CELERY_IGNORE_RESULT 这个选项对我来说更合理。不过,如果每个任务都设置这个选项,那你的意图就会更清楚了。

1

你应该把Celery升级到2.2.4版本(昨天发布的),因为这个版本修复了导致这个问题的错误。

详细信息可以查看 http://celeryq.org/docs/changelog.html

撰写回答