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 本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis 等等
 
任务执行单元
Worker 是 Celery 提供的任务执行的单元,worker 并发的运行在分布式的系统节点中。
 
任务结果存储
 
异步执行:解决耗时任务
延迟执行:解决延迟任务
定时执行:解决周期(周期)任务
 
四、Celery的安装配置
 
pip install celery
消息中间件:RabbitMQ/Redis
app=Celery('任务名', broker='xxx', backend='xxx')
 
五、两种 Celery 任务结构:提倡用包管理,结构更清晰
 

如果 Celery 对象:Celery(...) 是放在一个模块下的

  1. 终端切换到该模块所在文件夹位置:scripts
  2. 执行启动 worker 的命令:celery worker -A 模块名 -l info -P eventlet
注:windows 系统需要 eventlet 支持,Linux 与 MacOS 直接执行:celery worker -A 模块名 -l info
注:模块名随意

如果 Celery 对象:Celery(...) 是放在一个包下的
  1. 必须在这个包下建一个 Celery.py 的文件,将 Celery(...)产生对象的语句放在该文件中
  2. 执行启动 worker 的命令:celery worker -A 包名 -l info -P eventlet
注:windows 系统需要 eventlet 支持,Linux 与 MacOS 直接执行:celery worker -A 模块名 -l info
注:包名随意

放在根目录下就可以:

 

六、Celery 执行异步任务

包架构封装

 

七、基本使用

celery.py 基本配置

tasks.py 添加任务

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

get_result.py 获取结果

八、Django 中使用(更新轮播图案例)

最终达到的效果:根据定时任务来更新 redis 中的缓存。用户获取资源都是从 redis 缓存中获取。避免了数据库的压力

redis 的配置

 

 接口缓存

1)什么是接口的后台缓存 前台访问后台接口,后台会优先从缓存(内存)中查找接口数据 

  • 如果有数据,直接对前台响应缓存数据 

  • 如果没有数据,与(mysql)数据库交互,得到数据,对前台响应,同时将数据进行缓存,以备下次使用 

了解:前台缓存 - 前台在请求到接口数据后,在前台建立缓存,再发送同样请求时,发现前台缓存有数据,就不再对后台做请求了 
2)什么的接口会进行接口缓存

  1. 接口会被大量访问:比如主页中的接口,几乎所有人都会访问,而且会重复访问 

  2. 在一定时间内数据不会变化(或数据不变化)的接口

  3. 接口数据的时效性不是特别强(数据库数据发生变化了,不是立即同步给前台,验后时间同步给前台也没事) 

注:理论上所有接口都可以建立缓存,只要数据库与缓存数据同步及时 
3)如何实现接口缓存:主页轮播图接口

 

views.py

 

posted @ 2021-04-07 22:19  ネфイω  阅读(135)  评论(0)    收藏  举报