django-celery的集成开发
celery 特点
- celery 简单、灵活、可靠的分布式系统
- 处理异步任务队列
- 支持任务调度
celery 的组成
在django中使用celery
pip install django-celery
pip install celery-with-redis
pip install eventlet
pip install --upgrade https://github.com/celery/celery/tarball/master
在 settings.py
中 配置 celery
相关的配置
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/6'
redis带密码情况CELERY_BROKER_URL = 'redis://:123456@127.0.0.1:6379/3'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/7'
ELERY_TASK_SERIALIZER = 'json'
在 settings.py 配置文件所在的包下、新建一个 celerys.py
from celery import Celery
import os
# 引入django的环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taobao.settings')
# 创建一个 Celery 对象
app = Celery("taobao")
# 从 settings.py 中读取 CELERY_ 开头的所有配置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现任务(会从 INSTALLAPP_DIRS 下的所有应用中,找 tasks.py 文件)
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
在 settings.py 所在的包下的 init.py 模板中,导入 app
from .celerys import app as celery_app
__all__ = ('celery_app',)
在 应用 下 新建 user/tasks.py
from django.core.mail import EmailMessage
from celery import app
@app.shared_task
def send_mail(subject, body, to, subtype="html"):
message = EmailMessage(subject=subject, body=body, to=to)
message.content_subtype = subtype
message.send()
在 views.py 中,调用 任务
from user.tasks import send_mail
def send_email() :
....
send_mail.delay(subject, body ,to)
...
retrun ....
启动 celery 服务
celery -A 项目名 worker -l info -P eventlet