Celery 异步任务框架
一、官方
Celery 官网:http://www.celeryproject.org/Celery
官方文档英文版:http://docs.celeryproject.org/en/latest/index.htmlCelery
官方文档中文版:http://docs.jinkan.org/docs/celery/
二、Celery异步任务框架
1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持 socket) 2)Celery 服务为为其他项目服务提供异步解决任务需求的 注:会有两个服务同时运行,一个是项目服务,一个是 Celery 服务,项目服务将需要异步处理的任务交给 Celery 服务,Celery 就会在需要时异步完成项目的需求 人是一个独立运行的服务 | 医院也是一个独立运行的服务 正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题 人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求
Celery 架构图
Celery 的架构由三部分组成,消息中间件(message broker)、任务执行单元(worker)和 任务执行结果存储(task result store)组成。

如果 Celery 对象:Celery(...) 是放在一个模块下的
- 终端切换到该模块所在文件夹位置:scripts
- 执行启动 worker 的命令:celery worker -A 模块名 -l info -P eventlet
如果 Celery 对象:Celery(...) 是放在一个包下的
- 必须在这个包下建一个 Celery.py 的文件,将 Celery(...)产生对象的语句放在该文件中
- 执行启动 worker 的命令:celery worker -A 包名 -l info -P eventlet
放在根目录下就可以:
六、Celery 执行异步任务
包架构封装

七、基本使用
celery.py 基本配置

tasks.py 添加任务

add_task.py 添加立即、延迟任务

get_result.py 获取结果

八、Django 中使用(更新轮播图案例)
最终达到的效果:根据定时任务来更新 redis 中的缓存。用户获取资源都是从 redis 缓存中获取。避免了数据库的压力
redis 的配置

接口缓存
1)什么是接口的后台缓存 前台访问后台接口,后台会优先从缓存(内存)中查找接口数据
-
如果有数据,直接对前台响应缓存数据
-
如果没有数据,与(mysql)数据库交互,得到数据,对前台响应,同时将数据进行缓存,以备下次使用
了解:前台缓存 - 前台在请求到接口数据后,在前台建立缓存,再发送同样请求时,发现前台缓存有数据,就不再对后台做请求了
2)什么的接口会进行接口缓存
-
接口会被大量访问:比如主页中的接口,几乎所有人都会访问,而且会重复访问
-
在一定时间内数据不会变化(或数据不变化)的接口
-
接口数据的时效性不是特别强(数据库数据发生变化了,不是立即同步给前台,验后时间同步给前台也没事)
注:理论上所有接口都可以建立缓存,只要数据库与缓存数据同步及时
3)如何实现接口缓存:主页轮播图接口
views.py

浙公网安备 33010602011771号