gpt4 book ai didi

python - celery 任务状态总是挂起

转载 作者:IT老高 更新时间:2023-10-28 21:13:26 76 4
gpt4 key购买 nike

总的来说,我对 celery 和 django 很陌生,所以请原谅我缺乏知识。我正在尝试运行测试以进行一些计算并等待测试完成,以便我可以确保它完成了正确的答案。

这是我所拥有的:

在 app/tests.py 中

from tasks import *


c = calculate.apply_async(args=[1])

# wait until the task is done
while not calculate.AsyncResult(c.id).status == "SUCCESS":
print c.state
pass

在 app/tasks.py 中

from celery import shared_task

@shared_task
def calculate(proj_id):

#some calculations followed by a save of the object

即使在 celery 日志中表示任务已成功完成,状态也不会从挂起更改

[2014-06-10 17:55:11,417: INFO/MainProcess] Received task: app.tasks.calculate[1f11e7ab-0add-42df-beac-3d94c6868aac]
[2014-06-10 17:55:11,505: INFO/MainProcess] Task app.tasks.calculate[1f11e7ab-0add-42df-beac-3d94c6868aac] succeeded in 0.0864518239978s: None

我还在 mainapp/settings.py 中添加了 CELERY_IGNORE_RESULT = False,但这似乎没有任何作用。

最佳答案

直接来自文档:Result backend does not work or tasks are always in PENDING state.

默认情况下,所有任务都是 PENDING,因此状态最好命名为“未知”。发送任务时,Celery 不会更新任何状态,并且任何没有历史记录的任务都被假定为挂起(毕竟您知道任务 id)。

  1. 确保任务没有启用ignore_result

    启用此选项将强制工作人员跳过更新状态。

  2. 确保未启用 CELERY_IGNORE_RESULT 设置。

  3. 确保您没有任何旧 worker 仍在运行。

    意外启动多个worker很容易,因此在启动新的worker之前,请确保前一个worker已正确关闭。

    未配置预期结果后端的旧工作人员可能正在运行并劫持任务。

    –pidfile 参数可以设置为绝对路径,以确保不会发生这种情况。

  4. 确保客户端配置了正确的后端。

如果由于某种原因,客户端被配置为使用与工作线程不同的后端,您将无法接收结果,因此请检查后端是否正确:

>>> result = task.delay(…)
>>> print(result.backend)

关于python - celery 任务状态总是挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24148765/

76 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com