Django项目实战-----发送短信验证码实现celery异步操作(消费者与生产者模式)

什么是消费者与生产者模式?
答:
生产者生产一个东西放入到队列,消费者就取出来消费使用,生产者与消费者使用队列交互。

图解
在这里插入图片描述

为什么要使用celery异步操作?
答:
因为发送短信验证码要去请求第三方平台,是一个耗时操作,如果一个用户请求短信验证码时别的用户就必须等待请求完才能发送下一个请求,所以要使用异步,耗时操作的时候无需等待,直接发送下一个请求
celery在Django上使用的官方文档

安装celery第三方库
-U是下载最新版本

 pip install -U Celery

项目根目录创建一个包存放celery的代码
创建main.py入口函数和config.py配置文件
在这里插入图片描述
添加任务包
在这里插入图片描述
tasks.py代码

  • 任务包内就是要异步执行的代码,就是发送短信
  • 使用入口函数内的app对象.task(name="")装饰
from celery_tasks.main import app
from utils.sms.sms_util import SmsUtil


@app.task(name="celery_send_sms_code")
def celery_send_sms_code(tid, mobile, code):
    SmsUtil().send_message(tid, mobile, (code, '3'))

main.py内代码

  • 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')

  • 创建celery对象
app = Celery('celery包名')
  • 设置broker
app.config_from_object("celery包名.配置文件名")
  • celery自动检测任务
  • 设置完之后celery会自动去celery包内的任务包里面去检测任务
app.autodiscover_tasks(['celery包名.任务包'])
import os

from celery.app import Celery

# 设置Django环境,告诉celery当前是Django项目
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_market.settings')

# 2 创建celery对象
app = Celery('celery_tasks')

# 3 设置 broker
app.config_from_object("celery_tasks.config")

# 4celery自动检测任务  这里会自动去celery_tasks.sms下找tasks.py
app.autodiscover_tasks(['celery_tasks.sms'])

config.py内配置redis
把redis作为队列

broker_url = 'redis://127.0.0.1/15'

视图内调用任务函数
delay延时 使用app.task装饰的函数的delay方法才能实现异步

celery_send_sms_code.delay('1', mobile, sms_code)

命令启动celery
终端进入到文件夹内

celery -A celery_tasks.main worker -l info

在这里插入图片描述
celery对windows的支持不是那么好,接收到任务就是不处理的解决办法

冲破BUG!!!!!!!!!

方法一

包名.入口函数 添加--pool=solo 参数 运行celery
celery -A celery_tasks.main worker --pool=solo -l info

方法二

安装gevent包
pip install gevent
添加gevent参数运行celery
celery -A celery_tasks.main worker -l info -P gevent

方法三

安装eventlet包
pip install eventlet
运行celery在后面多加上一个参数 -P eventlet
celery -A celery_tasks.main worker -l info -P eventlet

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值