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

如何获取Celery队列中未分配给Worker的任务列表?

如何获取Celery队列中未分配给Worker的任务列表?

嘿,这个问题我之前也帮人捋过——当你禁用了Celery的预取功能后,i.inspect()确实只能查到Worker正在处理的那1个任务,毕竟没有预存的任务躺在Worker手里。那些还在队列里等着被分配的任务,其实都存在你的消息中间件(也就是Broker,比如Redis或者RabbitMQ)里,所以得从Broker这边入手来查询。

下面分几种场景给你具体的解决办法:

方法1:通过Broker直接查看(最准确)

因为未分配的任务都存在Broker的队列中,直接操作Broker是最直接的方式:

如果你的Broker是Redis

Celery默认会把任务存在名为celery的Redis列表里(如果用了自定义队列,就换成你自己的队列名):

  1. 打开Redis命令行客户端:redis-cli
  2. 执行命令列出队列里所有未分配的任务:LRANGE celery 0 -1
    • 这条命令会返回队列里的所有任务数据(是序列化后的格式,你可以用Celery的序列化工具反解析)
  3. 如果你只想看任务数量,执行:LLEN celery

你也可以通过Celery的API来封装这个操作,比如:

from celery import Celery
import json

# 初始化你的Celery app
app = Celery('your_task_app', broker='redis://localhost:6379/0')

def get_unassigned_tasks(queue_name='celery'):
    # 连接到Redis
    redis_conn = app.connection().client
    # 获取队列里的所有任务
    raw_tasks = redis_conn.lrange(queue_name, 0, -1)
    # 反序列化任务(假设用的是json序列化,根据你的配置调整)
    tasks = [json.loads(task) for task in raw_tasks]
    return tasks

# 调用示例
unassigned_tasks = get_unassigned_tasks()
print(f"队列里有{len(unassigned_tasks)}个未分配任务:")
for task in unassigned_tasks:
    print(f"任务ID: {task['headers']['id']}, 任务名称: {task['headers']['task']}")

如果你的Broker是RabbitMQ

  1. 查看队列的任务数量:用rabbitmqctl命令执行 rabbitmqctl list_queues name messages,其中messages列就是该队列未分配的任务数
  2. 查看具体任务内容:推荐用RabbitMQ的管理UI(默认访问地址是http://localhost:15672),登录后找到对应的队列,点击"Get Messages"按钮,就能预览或取出队列里的任务(注意:取出任务会从队列中移除,生产环境谨慎操作)

方法2:用Celery工具做补充验证

虽然inspect查不到未分配的任务,但可以用它来排除已处理/正在处理的任务:

  • celery inspect active:查看Worker当前正在处理的任务(就是你说的那1个)
  • celery inspect reserved:查看Worker已经预取但还未开始处理的任务(因为你禁用了预取,这个列表应该是空的)
  • celery inspect scheduled:查看已经调度但还没到执行时间的延迟任务

额外推荐:用Flower监控

如果需要长期监控队列状态,强烈推荐用Celery的官方监控工具Flower。它可以直观展示所有队列的任务数、Worker状态、任务详情,甚至能手动管理任务,非常方便。启动命令很简单:celery -A your_app flower,然后访问http://localhost:5555就能看到仪表盘。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:40:16