之前说过安装RabbitMQ-------》Linux下安装RabbitMQ
今天讲一下django中使用celery和RabbitMQ
一.安装
pip3 install Celery
pip3 install django-celery
二.django中的配置
1.settings.py文件
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
···
'djcelery',
]
···
import djcelery
djcelery.setup_loader()
CELERY_BROKER_URL = 'amqp://域名:5672/0' # Broker配置,这个值再RabbitMQ页面可以找到
CELERY_RESULT_BACKEND = 'amqp://域名' # BACKEND配置
2.在settings.py文件同级下新增celery.py文件
# coding:utf8
from __future__ import absolute_import
import os
from celery import Celery,platforms
from django.conf import settings
# 为 Celery 命令行程序设置了 DJANGO_SETTINGS_MODULE 变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
#创建了一个实例
app = Celery('myshop')
#加载项目设置中任意的定制化配置
app.config_from_object('django.conf:settings')
#在每个应用路径下查找 task.py 来加载定义在其中的异步任务
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
#C_FORCE_ROOT =true用root权限执行
platforms.C_FORCE_ROOT = True
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
3.修改同级的init.py文件
from __future__ import absolute_import
from .celery import app as celery_app
__all__=['celery_app']
4.在应用目录下新建tasks.py文件,引入你应用的异步任务
from celery import shared_task
from django.core.mail import send_mail
@shared_task
def order_created():
subject = '标题'
message = '一句话'
mail_sent = send_mail(subject, message,'发送邮箱号',[接收人邮箱号])
return mail_sent
5.把异步任务添加到需要的视图中,我是添加在订单完成后给用户发送提醒邮件这里
在views.py 文件中
···
from .tasks import order_created
···
order_created.delay()
···
三.运行celery worker
python3 manage.py celery worker -c 4 --loglevel=info