伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Django 使用Celery处理异步任务

来源:本站原创 浏览:142次 时间:2021-08-16
  1. 本实验通过Django 异步发送邮件作为示例

 
a.Celery实际上是生产者消费者模型来实现异步的:

 

b.实验所需组件:
1) Django
2) Celery
3) Redis

 

2.实验代码
a.启动redis-server

#./redis-server /etc/redis/redis.conf#cat /etc/redis/redis.confbind 192.168.60.72port 6379daemonize yesdbfilename dump.rdbdir /var/lib/redislogfile "/var/log/redis/redis-server.log"#ss -antlp | grep 6379LISTEN     0      128    192.168.60.72:6379                     *:*                   users:(("redis-server",pid=77880,fd=6))

b.配置Django

#django-admin startproject send_mail_prj#cd send_mail_prj#django-admin startapp app01创建Celery相关文件:├─manage.py│├─app01│  │  admin.py│  │  apps.py│  │  models.py│  │  tests.py│  │  urls.py│  │  utils.py│  │  views.py│  ├─__init__.py│├─celery_tasks  //创建如下文件│  │  config.py│  │  main.py│  │  __init__.py│  ││  ├─sms│     │  tasks.py│     └─__init__.py│   │└─send_mail_prj    │  asgi.py    │  settings.py    │  urls.py    │  wsgi.py    │─ __init__.py

 

#celery_tasks.init.py为空

 

#celery_tasks.confi��ĸ��,�ط���g.py

# Celery 配置文件broker_url = 'redis://192.168.60.72/10'

#celery_tasks.main.py

# celery入口from celery import Celery# 初始化celery实例celery_app = Celery('send_mail')# 加载celery配置celery_app.config_from_object('celery_tasks.config')# 注册任务celery_app.autodiscover_tasks(['celery_tasks.sms'])

 

#celery_tasks.sms.init.py 为空

 

#celery_tasks.sms.tasks.py

from celery_tasks.main import celery_appfrom email.mime.text import MIMETextimport smtplib# 定义异步任务@celery_app.task(name='send_mail')def sendEmail():    # 设置服务器所需信息    # 163邮箱服务器地址    mail_host = 'smtp.163.com'    # 163用户名    mail_user = 'yxxxx5'    # 密码(部分邮箱为授权码)    mail_pass = 'KIMxxxxxxxxxxxZ'    # 邮件发送方邮箱地址    sender = 'yxxxx5@163.com'    # 邮件接受方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发    receivers = ['yxxxx5@163.com']    # 设置email信息    # 邮件内容设置    message = MIMEText('dear frank, sdfsdfsdfasfdsdfsfwetrwre', 'plain', 'utf-8')    # 邮件主题    message['Subject'] = 'hi fxxxg sir sdfsfsdfasf'    # 发送方信息    message['From'] = sender    # 接受方信息    message['To'] = receivers[0]    # 登录并发送邮件    try:        smtpObj = smtplib.SMTP()        # 连接到服务器        smtpObj.connect(mail_host, 25)        # 登录到服务器        smtpObj.login(mail_user, mail_pass)        # 发送        smtpObj.sendmail(            sender, receivers, message.as_string())        # 退出        smtpObj.quit()        return ('success')    except smtplib.SMTPException as e:        print('error', e)  # 打印错误

 

3.Django写视图函数和配置URL
#app01.views.py

from django.http import HttpRequest, HttpResponse# 导入异步任务from celery_tasks.sms.tasks import sendEmail# Create your views here.def register(request):    # 发送邮件    sendEmail.delay()    return HttpResponse('hello')

 

#app01.urls.py

from django.conf.urls import urlfrom . import  viewsurlpatterns = [    url(r'register/$', views.register, name='register'),]

 

#send_mail_prj.urls.py

from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import url, includeurlpatterns = [    path('admin/', admin.site.urls),    url(r'^', include('app01.urls')),]

 

4.启动Celery
#cd send_mail_prj
#celery -A celery_tasks.main worker -l info
#celery -A celery_tasks.main worker -l info -P eventlet //windows下面需要添加-P eventlet

 

5.启动django
#cd send_mail_prj
#python manage.py runserver 0.0.0.0:80

 

6.访问127.0.0.1/register/


 
实验完成。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net