一、Celery介绍和基本使用
Celery官方文档:http://docs.celeryproject.org/en/latest/index.html
Celery是什么?
Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, 举几个实例场景中可用的例子:
- 异步任务:将耗时的操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音频处理等等
- 做一个定时任务,比如每天定时执行爬虫爬取指定内容
- 还可以使用celery实现简单的分布式爬虫系统等等
Celery 在执行任务时需要通过一个消息中间件(Broker)来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis,后面会讲
1.1 Celery有以下优点:
- 简单:Celery 易于使用和维护,并且它 不需要配置文件 ,并且配置和使用还是比较简单的(后面会讲到配置文件可以有)
- 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
- 快速:单个 Celery 进程每分钟可处理数以百万计的任务,而保持往返延迟在亚毫秒级
- 灵活: Celery 几乎所有部分都可以扩展或单独使用,各个部分可以自定义。
1.2 Celery执行流程图如下
二、Celery安装使用
- 安装celery模块
pip install celery
- Celery的默认broker(消息中间件)是RabbitMQ, 仅需配置一行就可以
BROKER_URL = ‘amqp://guest:guest@localhost:5672//’
rabbitMQ 没装的话请装一下,安装看这里 http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html#id3
3.使用Redis做broker(消息中间件)也可以
本地安装redis数据库(redis安装流程不再重复)
pip install redis
配置(Configuration is easy, just configure the location of your Redis database:)
app.conf.broker_url = ‘redis://localhost:6379/0’
三、Celery异步任务使用代码示例
对比说明
(1)不使用Celery的情况下我们执行一个耗时的任务,创建一个app.py 文件
import time
def add(x,y):
time.sleep(5)
return x+y
if __name__ == '__main__':
print('task start....')
result = add.delay(2,3)
print('task end....')
print(result)
运行代码发现出现5秒后打印了结果
task start....
task end....
5
(2)使用Celery执行(异步任务调度的情况),
- step1:新建一个tasks.py文件
import time
from celery import Celery
#消息中间件(使用的redis)
broker = 'redis://localhost:6379/1'
#结果存储(使用的redis)
backend = 'redis://localhost:6379/2'
#实例化Celery对象
app = Celery(
'celeryDemo',
broker=broker,
backend=backend
)
添加@app.task()装饰器,说明执行的任务是一个异步任务
@app.t