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

Django项目中Celery Beat未调度定时任务问题求助

解决Celery Beat未识别周期性任务的问题

1. 修正任务的绝对路径

你的beat_schedule里的task路径使用了相对路径..apps.scraper.scrapers.updates.get_updates,Celery要求使用绝对导入路径,格式应为Django应用名.模块名.函数名。假设scraper是已注册的Django应用,修改为:

app.conf.beat_schedule = {
    "get_updates": {
        "task": "scraper.scrapers.updates.get_updates",  # 使用绝对路径
        "schedule": crontab(minute="*/1"),
    },
}

2. 确保beat_schedule被Celery正确加载

目前你把beat_schedule放在tasks.py中,Celery启动时可能未加载到该配置。更稳妥的方式是将配置移到Django的settings.py里,添加:

CELERY_BEAT_SCHEDULE = {
    "get_updates": {
        "task": "scraper.scrapers.updates.get_updates",
        "schedule": crontab(minute="*/1"),
    },
}

这样celery.py中的app.config_from_object("django.conf:settings", namespace="CELERY")会自动读取该配置。

3. 确认任务的app实例匹配

updates.py里的@app.task装饰器必须绑定到celery.py中创建的Celery实例。确保updates.py的顶部导入正确:

# updates.py 顶部导入正确的Celery实例
from manga_project.celery import app

如果导入路径错误,任务无法被注册到Celery应用中。

4. 验证任务是否被注册

运行以下命令检查Celery是否识别到get_updates任务:

celery -A manga_project inspect registered

如果输出中没有该任务,说明任务未被正确注册,需检查updates.py的导入和装饰器使用。

5. 正确启动Celery服务

  • 启动Celery Worker:
celery -A manga_project worker -l info
  • 启动Celery Beat(单独启动,或与Worker合并):
celery -A manga_project beat -l info

若要同时启动Worker和Beat,可使用:

celery -A manga_project worker -B -l info

6. 检查Redis连接状态

确保Redis服务正在运行,Celery能正常连接redis://localhost:6379/0,用以下命令测试:

redis-cli -n 0 ping

返回PONG说明连接正常,否则检查Redis服务状态和端口权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:05:12