任务背景
emmmm,最近沉迷学习无法自拔,不过就在昨天收到了一个新需求,因为目前程序的某些地方计算所需的时间太太太太久了,导致让用户等待返回结果的时间太久,严重影响了用户体验急需搞定这件事情,不出意外这个任务又又又落到了我的身上。
用户使用逻辑与后端处理逻辑图
从图中可以发现第二步会消耗大量的时间,并且在经过计算后仅仅会给用户返回一个id,用户需要携带此id再次发起请求获取结果,所以根据逻辑图可以确定后端处理文件这件事可以异步进行,没必要叫客户等待,那如何做到这个功能呢?就要用到万能的Celery了[celery的详细用户可以直接查询官网]
简单说一下Celery到底是一个什么东西
Celery是一个简单,灵活且可靠的分布式系统,是一个任务队列,可以处理大量消息,着重于实时处理,同时还支持任务调度,最主要的是Celery是开源免费且好用的~
项目背景及环境
- 是一个提供文件解析的项目
- 用的是Python语言进行编写的 版本为3.6.10
- 框架使用的是Flask框架 版本为0.11.1
需要新安装的模块有
redis
pip install redis==2.10.6 # 高版本redis会引发一个报错
Celery
pip install celery==3.1.24
可能遇到的报错
AttributeError: 'str' object has no attribute 'items'
降低redis版本 pip install redis==2.10.6
前置条件
已经安装redis
示例程序结构及功能
功能是非阻塞发邮件
项目目录结构
|-flask_email_celery
| |-app
| | |-utils
| | | |