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

Django Celery Beat调度定时任务时worker报KeyError找不到任务问题咨询

问题成因

这个KeyError: 'transactions.tasks.add_trades_to_database'报错核心是Celery worker进程没有找到匹配的目标定时任务,具体原因来自两处配置不匹配:

  • 你在@task装饰器里手动指定了任务名称为add_trades_to_database,但在celery.py的beat_schedule配置里填写的任务名是带路径的transactions.tasks.add_trades_to_database,两边名称不匹配,导致beat推送的任务标识和worker已注册的任务标识对不上
  • 你启动Celery的命令参数错误:你的Celery实例绑定的Django项目名是example_api,但启动命令里写的是-A project,worker读取了错误的项目入口,自然加载不到transactions应用下的任务

解决方法

第一步:统一任务名称

两种方案二选一即可:

  • 方案1:修改celery.py里的beat_schedule配置,把task字段的值改为你手动指定的名称,和装饰器参数保持一致:
app.conf.beat_schedule = {
    'add_trades_to_database_periodically': {
        'task': 'add_trades_to_database',
        'schedule': crontab(minute='*/1'),
    },
}
  • 方案2:删除tasks.py里@task装饰器的name参数,让Celery自动生成带路径的任务名,和你现有beat配置匹配:
@task
def add_trades_to_database():
    # 原有业务逻辑保持不变

第二步:修正Celery启动命令

把启动命令里的-A project替换为你的实际项目名example_api:

# 启动worker
celery -A example_api worker -l info
# 启动beat
celery -A example_api beat -l info

第三步:清空残留任务(可选)

如果修改后仍有报错,先停止运行的beat和worker,清空RabbitMQ里残留的旧任务队列,再重新启动服务即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:48:04