在django中使用celery和RabbitMQ

之前說過安裝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
運行結果
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。