宸犀

导航

django-celery的集成开发

django-celery的集成开发

celery 特点

  • celery 简单、灵活、可靠的分布式系统
  • 处理异步任务队列
  • 支持任务调度

celery 的组成

  • 消息中间件
  • worker
  • task store

在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

posted on 2019-11-19 22:18  宸犀  阅读(196)  评论(1编辑  收藏  举报