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

使用Celery apply_async()时Worker不消费任务的问题排查

问题原因

你用apply_async(queue="queue")把任务发送到了名为queue的自定义队列,但启动Worker时没指定要消费这个队列——默认情况下Celery Worker只会监听默认队列(通常是celery),所以delay()能正常消费(因为它默认使用默认队列),而指定了自定义队列的任务会被留在队列里无人处理。

解决方法

有两种方式可以解决这个问题:

方式1:启动Worker时指定要监听的队列

修改启动命令,加上-Q参数指定要消费的队列:

celery -A some_task worker --loglevel=INFO --without-gossip -Q queue

如果需要同时监听默认队列和自定义队列,用逗号分隔多个队列:

celery -A some_task worker --loglevel=INFO --without-gossip -Q celery,queue

方式2:给任务配置默认队列(可选)

如果希望这个任务默认就发送到queue队列,不用每次调用都指定,可以在定义任务时设置:

@app.task(queue="queue")
def print_hi():
    print("hi")

之后不管用delay()还是apply_async(),任务都会进入queue队列,但仍需确保Worker启动时监听这个队列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:47:50