异步任务--celery发送邮件
安装两个python包:
pip install celery==3.1.25
pip install django-celery==3.2.1
pip install celery-with-redis==3.0
在你的应用下面创建名为task.py,用于封装耗时任务
#settings中配置邮箱
1 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 2 EMAIL_USE_TLS = False 3 EMAIL_HOST = 'smtp.163.com' 4 EMAIL_PORT = 25 5 EMAIL_HOST_USER = 'xxxxx@163.com' 6 EMAIL_HOST_PASSWORD = 'xxxxx' 7 EMAIL_FROM = 'xxxxx@163.com' 8 9 10 11 import djcelery 12 13 djcelery.setup_loader()
1 # 配置redis :密码@ip:端口/指定数据库 2 BROKER_URL = 'redis://:pzl123456@47.106.37.80:6379/0' 3 CELERT_IMPORTS = ('users.task')
python manage.py migrate
生成celery需要的表
将名为celery.py文件加入到同工程目录同名的目录下,代码如下:
1 from __future__ import absolute_import 2 3 import os 4 from celery import Celery 5 from django.conf import settings 6 7 8 app = Celery('portal') 9 10 app.config_from_object('django.conf:settings') 11 app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 12 13 14 @app.task(bind=True) 15 def debug_task(self): 16 print('Request: {0!r}'.format(self.request))
修改与工程目录同目录下的__init__.py文件
from newblog.celery import app as celery_app
把发送邮件的函数写到task.py文件中
用装饰器装饰这个函数
已启动redis
然后启动worker
linux下: 切换到项目下 python manage.py celery worker --loglevel=info
linux要用 nohup执行这个worker工人
在视图函数中调用
最后注册发送邮件调用
工人控制台显示