前面的篇章调用celery都是通过python3 manage.py shell
的方式使用,而celery是作为一个单独的模块包的使用方式,并没有在django中使用,本篇章来看看Django中如何整体使用一下。
pip3 install -U Celery
pip3 install django-celery==3.3.0
pip3 install "celery[librabbitmq,redis,auth,msgpack]"
在项目/settings.py中安装。
INSTALLED_APPS = (
...
'djcelery',
}
创建celery_tasks的包文件,专门存放tasks.py任务脚本以及celery相关配置管理,文档结构如下:
from celery import Celery
from celery_tasks import celeryconfig # 导入celery配置文件
import os
# 为celery设置环境变量
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
## 创建celery app
app = Celery('celery_tasks')
# 从单独的配置模块中加载配置
app.config_from_object(celeryconfig)
# 设置app自动加载任务
app.autodiscover_tasks(['celery_tasks'])
# 设置结果存储
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/9'
# 设置代理人broker
BROKER_URL = 'redis://127.0.0.1:6379/8'
from celery_tasks.celery import app as celery_app # 导入创建好的celery应用
from django.core.mail import send_mail # 使用django内置函数发送邮件
from django.conf import settings # 导入django的配置
@celery_app.task
def send_mail_task(title,email,msg):
# 使用django内置函数发送邮件
send_mail(title, '', settings.EMAIL_FROM,[email],html_message=msg)
from celery_tasks.tasks import send_mail_task # 导入celery任务
def sayhello(request):
# 测试发送邮件
title = '访问百度'
msg = '<a href="http://www.baidu.com/" target="_blank">访问百度</a>'
email = '35******7@qq.com'
send_mail_task.delay(title,email,msg) # 使用delay调用任务
return HttpResponse("hello world")
urlpatterns = [
# ex:/assetinfo/sayhello
path('sayhello', views.sayhello, name='sayhello'),
]
python3 manage.py migrate
python3 manage.py runserver
celery -A celery_tasks worker -l info -P eventlet