flask项目之6:生产者消费者模型的celery异步实现

  • 生产者与消费者的意思:
    生产者生成消息,缓存到消息队列中,消费者读取消息队列中的消息并执行。
    由商城生成发送短信消息,缓存到消息队列中,消费者读取消息队列中的发送短信消息并执行。

  • 为了将发送短信从主业务中解耦出去,我们要引入的是生产者和消费者设计模型,这是最常见的解耦方式之一,寻找中间人搭桥,保证两个业务没有直接关联。
    其中:生产者是flask项目 消费者是celery 中间人是Redis消息队列

消费者取到消息之后,要消费掉(执行任务),需要我们去实现。
任务可能出现高并发的情况,需要补充多任务的方式执行。
耗时任务很多种,每种耗时任务编写的生产者和消费者代码有重复。
取到的消息什么时候执行,以什么样的方式执行。
实际开发中,我们可以借助成熟的工具Celery来完成。
有了Celery,我们在使用生产者消费者模式时,只需要关注任务本身,极大的简化了程序员的开发流程。
Celery介绍
• Celery介绍
• 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。
• 单个 Celery 进程每分钟可处理数以百万计的任务。
• 通过消息进行通信,使用消息队列(broker)在客户端和消费者之间进行协调。

安装:
pip install celery

启动celery
到工作目录下执行:
celery -A lghome.tasks.main worker -l info -P eventlet
-A指定了main目录,-P指定使用eventlet
celery程序:
task_sms.py

from celery import Celery
from lghome.libs.ronglianyun.ccp_sms import CCP

# 创建celery对象 redis 16 0-15
celery_app = Celery("home", broker="redis://127.0.0.1:6379/1")

@celery_app.task
def send_sms(mobile, datas, tid):
    """发送短信的异步任务"""
    ccp = CCP()
    ccp.send_message(mobile, datas, tid)

对应的文件夹层级:
新建tasks文件夹,含有定义短信发送任务的sms文件夹,config配置文件,main定义celery_app,
config:

BROKER_URL = 'redis://127.0.0.1:6379/1'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'

定义存放中间人的Redis和存放结果的Redis
main:

from celery import Celery

celery_app = Celery("home")

# 加载配置文件
celery_app.config_from_object("lghome.tasks.config")

# 注册任务
celery_app.autodiscover_tasks(["lghome.tasks.sms"])

tasks:

from lghome.tasks.main import celery_app
from lghome.libs.ronglianyun.ccp_sms import CCP


@celery_app.task
def send_sms(mobile, datas, tid):
    """发送短信的异步任务"""
    ccp = CCP()
    ccp.send_message(mobile, datas, tid)

verify_code文件内定义

from lghome.tasks.sms.tasks import send_sms
send_sms.delay(mobile, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES/60)), 1)
注:deley是关键,需要用这个参数表明是异步执行

celery执行结果:
在注册之后,可以看到:
在这里插入图片描述
在发送验证码成功后:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值