之前說過安裝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配置
RabbitMQ頁面的amqp
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 命令行程序設(shè)置了 DJANGO_SETTINGS_MODULE 變量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
#創(chuàng)建了一個實例
app = Celery('myshop')
#加載項目設(shè)置中任意的定制化配置
app.config_from_object('django.conf:settings')
#在每個應(yīng)用路徑下查找 task.py 來加載定義在其中的異步任務(wù)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
#C_FORCE_ROOT =true用root權(quán)限執(zhí)行
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.在應(yīng)用目錄下新建tasks.py文件轴术,引入你應(yīng)用的異步任務(wù)
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,'發(fā)送郵箱號',[接收人郵箱號])
return mail_sent
5.把異步任務(wù)添加到需要的視圖中啊送,我是添加在訂單完成后給用戶發(fā)送提醒郵件這里
在views.py 文件中
···
from .tasks import order_created
···
order_created.delay()
···
三.運行celery worker
python3 manage.py celery worker -c 4 --loglevel=info
運行結(jié)果