django+celery

使用 django-celery-beat 来管理定时任务,这样可以:

  • 不用重启服务就能添加/修改任务
  • 支持数据库持久化定时任务
  • 还能用 Admin 界面可视化管理任务 💡


🚀 一套完整方案来实现 Django + Celery + 定时任务



✅ 步骤 1:安装依赖

pip install celery django-celery-beat


✅ 步骤 2:配置 Celery(项目根目录下新建 celery.py

your_project/celery.py 中写入:

import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')

app = Celery('your_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

然后在 __init__.py 中导入:

from .celery import app as celery_app

__all__ = ['celery_app']


✅ 步骤 3:配置 settings.py

INSTALLED_APPS = [
    ...
    'django_celery_beat',
]

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/1'

# 使用 django-celery-beat 存储周期性任务
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'


✅ 步骤 4:初始化数据库(创建表)

python manage.py migrate


✅ 步骤 5:写一个 Celery 任务

创建一个任务,比如放在 app/tasks.py

from celery import shared_task

@shared_task
def say_hello(name):
    print(f"👋 Hello, {name}!")
    return f"Hello, {name}!"


✅ 步骤 6:在 Admin 页面添加周期性任务

先创建超级管理员并登录:

python manage.py createsuperuser
python manage.py runserver

然后在后台 http://127.0.0.1:8000/admin/

  1. 进入 Periodic Tasks → 添加一个新任务
  2. 填写名称
  3. 选择 Task 为 app.tasks.say_hello
  4. 添加 Interval Schedule 或 Crontab Schedule
  5. 填写参数:["ChatGPT"](注意是 JSON 格式)
  6. 保存!


✅ 步骤 7:启动服务

# 启动 Worker
celery -A your_project worker -l info

# 启动 Beat(定时器调度)
celery -A your_project beat -l info

现在任务就会定时运行啦 🎉



需要我帮你写一个“动态添加定时任务”的函数接口吗?比如你传入任务名和参数,它就自动存到数据库并调度?还是你只想用 Admin 后台添加?

文章标签:

评论(1)

用户头像
tongqing

apply_async 介绍 1. 基本用法 python 复制 编辑 task.apply_async(args, kwargs, countdown=None, eta=None, retries=0, retry_policy=None, **options) 2. 参数说明 args: 任务所需的位置参数(与普通函数调用一样)。 kwargs: 任务所需的关键字参数(与普通函数调用一样)。 countdown: 延迟时间(单位:秒),指定任务在多久之后执行。 例如,countdown=10 表示任务将在 10 秒后执行。 eta: 任务的指定执行时间(datetime 对象)。与 countdown 类似,但是你可以指定具体的时间点。 例如,eta=datetime(2023, 5, 1, 10, 30) 表示任务将在 2023 年 5 月 1 日 10:30 执行。 retries: 任务的最大重试次数。默认为 0(不重试)。 retry_policy: 自定义重试策略,定义了如何重试任务(如间隔时间、最大重试次数等)。 options: 其他额外的配置项,比如 queue、priority、expires(任务过期时间)等。

2025年04月25日 13:50