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

Flask+Celery调用任务失败:任务名称不匹配问题求助

Flask+Celery任务名称不匹配的修复方案

问题根源

你的Celery worker注册的任务名是example.add_together,但Flask应用调用任务时却使用了带目录前缀的flask-projects.example.add_together,导致任务找不到触发KeyError。这是因为Flask运行时的模块上下文和Celery worker的模块加载方式不一致,自动生成的任务名前缀出现差异。

具体修复步骤

1. 显式指定任务名称

在定义Celery任务时,手动指定任务名,避免Celery自动生成带目录前缀的名称:

# example.py 中的任务定义
@celery.task(name='example.add_together')
def add_together(a, b):
    return a + b

这样不管模块加载上下文如何,任务名都会固定为example.add_together,和worker注册的名称保持一致。

2. 检查Celery实例的include配置

初始化Celery实例时,确保include参数使用顶层模块名,不要带目录前缀:

# example.py 中的Celery初始化
from celery import Celery

celery = Celery(
    'example',
    broker='redis://localhost:6379/0',  # 替换为你的broker地址
    include=['example']  # 这里用模块名,而非flask-projects.example
)

3. 确保任务调用方式正确

在Flask的视图函数中,直接调用任务的delay方法即可,不要手动拼接任务全名:

# example.py 中的视图函数
@app.route('/add/task')
def add_task():
    result = add_together.delay(1, 2)
    return {'task_id': result.id}

验证修改

  1. 重启Celery worker:celery -A example worker --loglevel INFO,确认注册的任务名仍为example.add_together
  2. 重启Flask应用:flask --app example run --debug
  3. 调用/add/task端点,此时任务应该能正常被worker接收执行,不再触发KeyError

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:17:39