使用celery異步發送郵件

原理:耗時操作交給另一個進程執行

pip install celery==3.1.25 celery-with-redis==3.0 django-celery==3.2.1

在你的應用下面創建名爲task.py,用於封裝耗時任務

配置setting文件

    #配置郵箱

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = False
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'xxxxx'
EMAIL_FROM = '[email protected]'



import djcelery

djcelery.setup_loader()
# 配置redis            :密碼@ip:端口/指定數據庫
BROKER_URL = 'redis://:[email protected]:6379/0'
CELERT_IMPORTS = ('users.task')

遷移生成celery需要的表

python manage.py migrate

將名爲celery.py文件加入到同工程目錄同名的目錄下,代碼如下

from __future__ import absolute_import

import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'whthas_home.settings')

app = Celery('portal')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

修改與工程目錄同目錄下的__init__.py文件

from newblog.celery import app as celery_app
把發送郵件的函數寫到task.py文件中

用裝飾器裝飾這個函數

已啓動redis 

然後啓動worker   

python manage.py celery worker --loglevel=info

    linux要用  nohup執行這個worker工人

在視圖函數中調用


最後註冊發送郵件調用

工人控制檯顯示



測試完成




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章