You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Celery搭配Redis后端时AsyncResult获取结果异常挂起问题

问题分析与解决方法

嘿,这个问题我遇过!原因其实很简单:你直接创建的AsyncResult实例没有配置正确的Redis后端信息,导致它不知道该去哪里读取任务结果,所以一直挂起等待。

你看,当你用add.delay(1,1)得到的r对象,它是从你的Celery任务实例继承了已配置好的Redis后端(就是你看到的r.backend那个RedisBackend对象),所以能正常获取结果。但当你用AsyncResult(r.id)新建一个对象时,这个x并没有自动继承你的Celery应用的配置,它可能用了默认的后端(比如RPC后端),根本连不上你的Redis存储,自然就卡着不动了。

解决办法有两种:

  • 方法一:从你的Celery应用实例中生成AsyncResult
    假设你的Celery应用是在test_celery模块里定义的(比如叫app),你可以这样做:

    >>> from test_celery import app
    >>> from celery.result import AsyncResult
    >>> x = app.AsyncResult(r.id)
    >>> x.get()  # 现在就能正常拿到结果2了
    

    这样创建的AsyncResult会自动使用你Celery app里配置好的Redis后端和消息队列信息。

  • 方法二:手动指定后端参数
    如果你不想导入Celery app,也可以在创建AsyncResult时直接指定Redis后端的地址:

    >>> x = AsyncResult(r.id, backend='redis://localhost:6379/0')  # 替换成你的Redis实际地址
    >>> x.get()
    

你可以试试上面两种方法,应该就能解决挂起的问题啦~

内容的提问来源于stack exchange,提问作者seb835

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:39