Python Django 2.0 集成 Celery 4.1 完整教程
本文详细讲解如何在 Python Django 2.0 项目中集成 Celery 4.1,实现异步任务处理与周期性定时任务。涵盖环境准备、Broker 配置、Worker 启动、Beat 调度器设置以及使用 django-celery-results 存储任务结果等关键步骤,帮助开发者快速搭建高效的任务队列系统。
环境准备与依赖安装
环境准备
确保系统已安装 Python 3.6 版本。
使用 pip 安装指定版本的 Django:pip install Django==2.0.1
使用 pip 安装指定版本的 Celery:pip install celery==4.1.0
安装 eventlet 以支持协程处理:pip install eventlet
安装消息中间件所需的 Erlang 语言和 RabbitMQ 服务器。
Django 项目配置
配置 Django 项目的 settings.py 文件。
在 settings.py 文件中添加以下 Celery 相关配置:
...
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672'
在与 settings.py 相同的目录下创建 celery.py 文件。
celery.py 文件内容如下:
注意将代码中的 project_name 替换为实际的项目名称。
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
# 注册Celery的APP
app = Celery('project_name')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现各个app下的tasks.py文件
app.autodiscover_tasks()
修改与 settings.py 同级目录下的 __init__.py 文件。
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
定义异步任务
在具体的 APP 目录下创建 tasks.py 文件以定义任务。
tasks.py 文件内容如下:
# -*- coding: utf-8 -*-
from celery.task import task
# 自定义要执行的task任务
@task
def print_hello():
return 'hello celery and django...'
配置定时任务
配置周期性任务或定时任务。
再次编辑 settings.py 文件,添加 CELERY_BEAT_SCHEDULE 配置:
关于定时任务的具体配置格式,可参考官方文档:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
from celery.schedules import crontab
CELERY_BEAT_SCHEDULE = {
# 周期性任务
'task-one': {
'task': 'app.tasks.print_hello',
'schedule': 5.0, # 每5秒执行一次
# 'args': ()
},
# 定时任务
'task-two': {
'task': 'app.tasks.print_hello',
'schedule': crontab(minute=0, hour='*/3,10-19'),
# 'args': ()
}
}
启动服务与管理
启动 Celery Worker 和 Beat 定时任务服务。
启动 Worker 服务(需切换到 manage.py 同级目录下执行):
celery -A project_name worker -l info -P eventlet
启动定时任务调度器(Beat):
celery -A project_name beat -l info
备注:建议在生产环境中使用 supervisord 来管理上述两条命令,以确保服务稳定运行。
任务结果存储扩展
如需存储任务执行结果,需进行扩展配置。
pip install django-celery-results
Install APP
INSTALLED_APPS = (
...,
'django_celery_results',
)
生成数据库表以存储结果:python manage.py migrate django_celery_results
在 settings 中配置结果后端:CELERY_RESULT_BACKEND = 'django-db',这将使任务执行结果信息存储在数据库中。
以上即为 Python Django 2.0 集成 Celery 4.1 的完整教程内容,供参考使用。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













