Celery AsyncResult总是PENDING

 小心大巧 发布于 2022-12-31 17:14

我正在进行演示,代码很简单:

# The Config
class Config:
    BROKER_URL = 'redis://127.0.0.1:6379/0'
    CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
    CELERY_ACCEPT_CONTENT = ['application/json']

# The Task
@celery_app.task()
def add(x, y):
    return x + y

启动工人:

$ celery -A appl.task.celery_app worker --loglevel=info -broker=redis://localhost:6379/0

 -------------- celery@ALBERTATMP v3.1.13 (Cipater)
 ---- **** ----- 
 --- * ***  * -- Linux-3.2.0-4-amd64-x86_64-with-debian-7.6
 -- * - **** --- 
 - ** ---------- [config]
 - ** ---------- .> app:         celery_test:0x293ffd0
 - ** ---------- .> transport:   redis://localhost:6379/0
 - ** ---------- .> results:     disabled
 - *** --- * --- .> concurrency: 2 (prefork)
 -- ******* ---- 
 --- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery

安排任务:

>>> from appl.task import add
>>> r = add.delay(1, 2)
>>> r.id
'c41d4e22-ccea-408f-b48f-52e3ddd6bd66'
>>> r.task_id
'c41d4e22-ccea-408f-b48f-52e3ddd6bd66'
>>> r.status
'PENDING'
>>> r.backend

然后工作人员将执行任务:

[2014-07-29 17:54:37,356: INFO/MainProcess] Received task: appl.task.add[beeef023-c582-42e1-baf7-9e19d9de32a0]
[2014-07-29 17:54:37,358: INFO/MainProcess] Task appl.task.add[beeef023-c582-42e1-baf7-9e19d9de32a0] succeeded in 0.00108124599865s: 3 

但结果仍然是PENDING:

>>> res = add.AsyncResult(r.id)
>>> res.status
'PENDING'

我试过官方常见问题解答.但它没有帮助.

>>> celery_app.conf['CELERY_IGNORE_RESULT']
False

我做错了什么?谢谢!

1 个回答
  • 它已经有一段时间了,但是对于那些遇到类似问题的人来说,这更多的是:

    在屏幕截图中,您会看到结果已被禁用

    在此输入图像描述

    实例化celery实例时,请确保您具有正确的配置输入

    from celery import Celery,Task
    
    # here im using an AMQP broker with a memcached backend to store the results
    celery = Celery('task1',broker='amqp://guest:guest@127.0.0.1:5672//',backend='cache+memcached://127.0.0.1:11211/')
    

    出于某种原因,我总是很难通过配置文件获取参数化的celery实例,因此在实例化过程中显式传递了代理和后端,如上所示

    现在,您将看到正确配置为memcached的结果(在我的实例中 - 应该是您的redis).还要确保在任务列表中找到您的任务(task1.add)

    在此输入图像描述

    如果你仍然无法让它工作,在启动芹菜时尝试使用如下调试选项

    celery worker -A task1.celery -l debug
    

    看看它喷出的信息是否出错

    在我的情况下,它修复了你的错误,结果设置为成功,我能够恢复3 r.get()

    2022-12-31 17:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有