django+celery
已于 2025年04月25日 10:05 修改
访问次数:0
使用 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/ :
- 进入 Periodic Tasks → 添加一个新任务
- 填写名称
- 选择 Task 为 app.tasks.say_hello
- 添加 Interval Schedule 或 Crontab Schedule
- 填写参数:["ChatGPT"](注意是 JSON 格式)
- 保存!
✅ 步骤 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