一、celery异步任务框架
官方
Celery 官网:http://www.celeryproject.org/
Celery 官方文档英文版:http://docs.celeryproject.org/en/latest/index.html
Celery 官方文档中文版:http://docs.jinkan.org/docs/celery/
1、可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket)
2、celery服务为为其他项目服务提供异步解决任务需求的
注:会有两个服务同时运行,一个是项目服务,一个是celery服务,项目服务将需要异步处理的任务交给celery服务,celery就会在需要时异步完成项目的需求
例如:人是一个独立运行的服务 |,医院也是一个独立运行的服务
正常情况下,人可以完成所有健康情况的动作,不需要医院的参与;但当人生病时,就会被医院接收,解决人生病问题
人生病的处理方案交给医院来解决,所有人不生病时,医院独立运行,人生病时,医院就来解决人生病的需求
二、celery架构图
Celery的架构由三部分组成,消息中间件(message broker)、任务执行单元(worker)和 任务执行结果存储(task result store)组成。
消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等
任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。
任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等
注意:Broker 相当于 挂号窗口 (也相当于 生产者)。Worker 相对于 医生看病(也相当于 消费者) 。Backend 相当于 检验报告单。
后期 Broker 要用RabbitMQ
注意:队列比数据库的好处是:队列可以进行通信,消费者一旦执行起来,会一直执行。
队列可以做到,当队列中没有数据了,就告诉消费者不要执行消费了,或者告诉生产者让它生产
三、使用场景
异步执行:解决耗时任务 (如:边下载电影,边看电影)
延迟执行:解决延迟任务 (如:定时发邮件、短信)
定时执行:解决周期(周期)任务 (如:定时闹钟,定时更新轮播图,定时爬虫天气)
四、Celery的使用
1、 pycharm终端下安装:
命令:pip install celery
2、cmd终端命令检查
3、消息中间件:RabbitMQ/Redis
app=Celery('任务名', broker='xxx', backend='xxx')
4、启动celery
方法一、模块下
01、创建app+任务
02、pycharm终端下安装:
先 cd 到scripts文件夹下
再命令:pip install eventlet (非windows系统不需要)
03、pycharm终端下:
先 cd 到scripts文件夹下
再命令:celery worker -A t_celery -l info -P eventlet
注意:非windows系统下 命令:celery worker -A t_celery -l info
方法二、包下
01、创建 app+任务
02、同方法一
03、pycharm终端下:
先 cd 到scripts文件夹下
再命令:celery worker -A 包名 -l info -P eventlet
注意:非windows系统下 命令:celery worker -A 包名 -l info
四、启动celery(两种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
# 注:包名随意