Django Celery 是一个在 Django 项目中集成 Celery 的插件,允许你创建和调度定时任务。Celery 是一个异步任务队列,可以用于处理后台任务、定时任务等。
下面是使用 Django Celery 实现定时任务的详细步骤:
确保已经安装了 Celery 和 Django Celery。可以通过以下命令使用 pip 安装它们:
pip install celery
pip install django-celery
在 Django 项目的 settings.py
文件中,配置 Celery 相关信息。添加以下配置:
# settings.py
# 配置Celery Broker为Redis
CELERY_BROKER_URL = 'redis://localhost:6379/0'
# 配置Celery结果后端为Redis
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
注意:上述配置假设你已经安装了 Redis 并且运行在本地地址上。
在项目的 celery.py
文件中,创建 Celery 实例,并加载 Django 配置:
# celery.py
from celery import Celery
from django.conf import settings
# 创建Celery实例
celery_app = Celery('my_project')
# 加载Django配置
celery_app.config_from_object(settings, namespace='CELERY')
# 自动发现和注册Django App中的tasks.py文件
celery_app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
在 Django 的某个 App 中,创建 tasks.py
文件,并在其中编写定时任务:
# your_app/tasks.py
from celery import shared_task
from datetime import timedelta
from django.utils import timezone
@shared_task
def my_periodic_task():
# 在这里编写你的定时任务逻辑
print("定时任务执行了!")
这是一个简单的定时任务示例,它打印一条消息。你可以根据需求编写更复杂的任务逻辑。
在终端中,导航到项目根目录,启动 Celery Worker 来处理定时任务:
celery -A your_project_name worker --loglevel=info
其中,your_project_name
是你的 Django 项目名。
使用 Celery 的 beat 调度器来定期运行任务。在 celery.py
文件中添加以下配置:
# celery.py
# ...
# 添加定时任务调度配置
from celery.schedules import crontab
celery_app.conf.beat_schedule = {
'my-periodic-task': {
'task': 'your_app.tasks.my_periodic_task',
'schedule': crontab(minute='*/15'), # 每隔15分钟运行一次任务
},
}
在上述例子中,我们设置了一个名为 my-periodic-task
的定时任务,它会每隔 15 分钟运行一次 my_periodic_task
函数。
在终端中,导航到项目根目录,启动 Celery Beat 来调度定时任务:
celery -A your_project_name beat --scheduler django_celery_beat.schedulers:DatabaseScheduler --detach
现在,你的 Django 项目已经集成了 Celery 和 Celery Beat,并且可以定期执行定时任务。
注意:Celery Beat 将调度信息存储在数据库中,因此你的 Django 项目需要有一个可用的数据库。如果还未迁移数据库,请先运行 python manage.py migrate
来创建所需的数据库表。
总结: 以上就是使用 Django Celery 实现定时任务的完整过程。它使得编写和调度定时任务变得非常简单,同时也提供了更多的配置选项来满足各种需求。请根据实际需求修改定时任务的调度配置和任务逻辑。