Celery Worker启动Beat后出现未注册任务异常求助
解决Celery Beat启动后Worker提示任务未注册的问题
问题原因
Celery任务的唯一标识是模块名.任务函数名,你在beat_schedule里指定的任务名是my_beat_task,但Worker实际注册的任务全名是tasks.my_beat_task(任务定义在tasks.py模块中),导致Beat发送的任务找不到对应的注册项,触发未注册错误。
修复步骤
- 修改
tasks.py中的beat_schedule配置,将任务名称改为带模块前缀的全名:
from celery import Celery app = Celery('my_task', broker='redis://localhost', include=["tasks"]) app.conf.broker_connection_retry_on_startup = True app.conf.beat_schedule = { 'add-every-3-seconds': { 'task': 'tasks.my_beat_task', # 修正为模块名.任务函数名 'schedule': 3.0, }, } @app.task def my_task(): print('123') @app.task def my_beat_task(): print('123')
- 重启Celery Worker和Beat进程,确保新配置生效。
验证方式
启动Worker后,查看日志中的任务注册信息,确认tasks.my_beat_task已被正常注册:
[2023-07-24 00:30:00,000: INFO/MainProcess] Tasks registered: 'tasks.my_task', 'tasks.my_beat_task'
内容的提问来源于stack exchange,提问作者Artem Filippov
相关产品推荐
相关产品推荐

