当前位置: 首页 > 工具软件 > django-taobao > 使用案例 >

django - celery

姚晋
2023-12-01

django - celery 的集成开发

celery 特点

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

celery 的组成

  • 消息中间件
  • 任务执行单元 worker
  • 任务结果存储 task store

在 django 中使用 celery

1、安装

  • pip install django-celery
  • pip install celery-with-redis
  • pip install eventlet
  • pip install --upgrade https://github.com/celery/celery/tarball/master

2、在 settings.py 中 配置 celery 相关的配置

  • CELERY_BROKER_URL = redis://127.0.0.1:6379/6
  • CELERY_ACCEPT_CONTENT = ['json']
  • CELERY_RESULT_BACKEND = redis://127.0.0.1:6379/7
  • ELERY_TASK_SERIALIZER = 'json'

3、在 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))

4、在 settings.py 所在的包下的 __init__.py 模板中,导入 app

from .celerys import app as celery_app

__all__ = ('celery_app',)

5、在应用下新建 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()

6、在 views.py 中,调用任务

	from user.tasks import send_mail 
	
	def send_email() :
		....
		send_mail.delay(subject, body ,to)
		...
		retrun ....

7、启动 celery 服务

  • celery -A 项目名 worker -l info -P eventlet
 类似资料: