原理:耗時操作交給另一個進程執行
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工人
在視圖函數中調用
最後註冊發送郵件調用
工人控制檯顯示
測試完成