之前說過安裝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 命令行程序設置了 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
運行結果