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

如何确定Celery任务的来源队列?及查看当前机器监听的队列

Celery任务内获取来源队列与监听队列方法

一、获取当前任务的来源队列

Celery任务实例自带的request属性包含任务投递信息,其中delivery_info字典的routing_key字段对应任务的来源队列(若未配置自定义路由规则,该值直接是队列名)。

任务内实现代码:

from celery import task

@task
def myfunc():
    # 提取来源队列名
    source_queue = myfunc.request.delivery_info.get('routing_key')
    print(f"当前任务来自队列: {source_queue}")

二、查看当前机器监听的队列

有两种实用方式:

1. 通过Celery控制接口查询

利用Celery应用的control.inspect()方法,可获取当前worker集群的队列监听状态,若仅需当前任务所在worker的队列,可按worker名称筛选:

from celery import current_app

@task
def myfunc():
    inspector = current_app.control.inspect()
    # 获取所有活跃worker的监听队列数据
    active_queues = inspector.active_queues()
    if active_queues:
        # 取当前worker的队列列表(示例取第一个worker,实际可根据worker名称精准筛选)
        worker_name = list(active_queues.keys())[0]
        queues = [q['name'] for q in active_queues[worker_name]]
        print(f"当前机器监听的队列: {queues}")

注意:使用该方法要求worker启动时默认开启的控制端口正常可用,且当前任务所在worker处于可被inspect访问的状态。

2. 通过环境变量传递启动参数

若worker启动时通过-Q指定了监听队列,可在启动时将队列名存入环境变量,任务内直接读取:
启动worker的命令:

export CELERY_LISTEN_QUEUES="queueA,queueB,queueC"
celery -A your_app worker -Q $CELERY_LISTEN_QUEUES

任务内读取代码:

import os

@task
def myfunc():
    listen_queues = os.environ.get('CELERY_LISTEN_QUEUES', '').split(',')
    print(f"当前机器监听的队列: {listen_queues}")

这种方式无需依赖Celery控制接口,实现更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:06:29