20201125-第五讲-celery使用&登录接口定义

异步方案Celery

生产者消费者设计模式

问题:

我们的代码是自上而下同步执行的。

发送短信是耗时的操作。如果短信被阻塞住,用户响应将会延迟。

响应延迟会造成用户界面的倒计时延迟。

解决:

异步发送短信

发送短信和响应分开执行,将发送短信从主业务中解耦出来。

生产者消费者设计模式介绍

为了将发送短信从主业务中解耦出来,我们引入生产者消费者设计模式。

它是最常用的解耦方式之一,寻找中间人(broker)搭桥,保证两个业务没有直接关联。

总结:

生产者生成消息,缓存到消息队列中,消费者读取消息队列中的消息并执行。

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

Celery介绍和使用

\bullet 消费者取到消息之后,要消费掉(执行任务),需要我们去实现。

\bullet 任务可能出现高并发的情况,需要补充多任务的方式执行。

\bullet 耗时任务很多种,每种耗时任务编写的生产者和消费者代码有重复。

\bullet 取到的消息什么时候执行,以什么样的方式执行。

结论:

\bullet 实际开发中,我们可以借助成熟的工具Celery来完成。

\bullet 有了Celery,我们在使用生产者消费者模式时,只需要关注任务本身,极大的简化了程序员的开发流程。

Celery介绍

Celery

。介绍一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。

。单个 Celery 进程每分钟可处理数以百万计的任务。

。通过消息进行通信,使用消息队列(broker)在客户端和消费者之间进行协调。

\bullet 安装Celery

1 $ pip install Celery

Celery官方文档

创建Celery实例并加载配置

celery_tasks.main.py

1 # celery启动文件

2 from celery import Celery

3 # 创建celery实例

4 celery_app=Celery('home')

加载Celery配置

celery_tasks.config.py

1 # 指定消息队列的位置

2 broker_url="redis://127.0.0.1/10"

celery_tasks.main.py

1 # celery启动文件

2 from celery import Celery

3 # 创建celery实例

4 celery_app=Celery('home')

5 # 加载celery配置

6 celery_app.config_from_object('celery_tasks.config')

定义发送短信任务

注册任务:celery_tasks.main.py

1 # celery启动文件

2 from celery import Celery

3 # 创建celery实例

4 celery_app=Celery('home')

5 # 加载celery配置

6 celery_app.config_from_object('celery_tasks.config')

7 # 自动注册celery任务

8 celery_app.autodiscover_tasks(['celery_tasks.sms'])

定义任务:celery_tasks.sms.tasks.py

1 @celery_app.task

2 def send_sms(to,datas,temp_id):

3       """发送短信的异步任务"""

4       ccp = CCP()

5       try:

6             result=ccp.send_message(to,datas,temp_id)

7       except Exception as e:

8             result=-2

9        return result

启动Celery服务

1 celery -A home.tasks.task_sms worker -l info

-A指对应的应用程序, 其参数是项目中 Celery实例的位置。

worker指这里要启动的worker。

-l指日志等级,比如info等级。

调用发送短信任务

1# Celery异步发送短信验证码

2send_sms.delay(mobile, [sms_code,int(constants.SMS_CODE_REDIS_EXPIRES/60)]

用户登录

账号登录


用户名登录逻辑分析

用户名登录接口设计

用户名登录接口定义

1 @api.route("/sessions", methods=["POST"])

2 def login():

3        """用户登录

4        参数: 手机号、密码, json

5        """

用户名登录后端逻辑

1 @api.route("/sessions", methods=["POST"])

2 def login():

3        """用户登录

4        参数: 手机号、密码, json

5        """

6        # 获取参数

7        # 校验参数

8        # 手机号的格式

9        # 从数据库中根据手机号查询用户的数据对象

10       # 用数据库的密码与用户填写的密码进行对比验证

11        # 如果验证相同成功,保存登录状态, 在session中


2020-11-26

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容