前面的篇章调用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]"
安装djcelery
在项目/settings.py中安装。
INSTALLED_APPS = (
...
'djcelery',
}
celery_tasks包文件配置以及任务编写
创建celery_tasks的包文件,专门存放tasks.py任务脚本以及celery相关配置管理,文档结构如下:

celery.py
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'])
celeryconfig.py
# 设置结果存储
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/9'
# 设置代理人broker
BROKER_URL = 'redis://127.0.0.1:6379/8'
tasks.py
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)
编写视图使用celery任务
-
在assetinfo/views.py文件中创建视图sayhello。
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*****@qq.com'
send_mail_task.delay(title,email,msg) # 使用delay调用任务
return HttpResponse("hello world")
-
在assetinfo/urls.py中配置。
urlpatterns = [
# ex:/assetinfo/sayhello
path('sayhello', views.sayhello, name='sayhello'),
]
迁移生成celery数据表
python3 manage.py migrate
启动celery服务进行测试
-
启动django服务
python3 manage.py runserver
-
启动celery的worker
celery -A celery_tasks worker -l info -P eventlet
-
请求视图,然后查看celery执行任务的情况 访问http://127.0.0.1:8000/assetinfo/sayhello
-
celery执行任务如下:

-
查看收到的邮件

原文始发于微信公众号(海洋的渔夫):11. Django 2.1.7 Celery 4.3.0 异步发送邮件示例
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/35198.html