Celery调度+Redis安装
Celery是一个使用Python开发的分布式任务调度模块,因此对于大量使用Python构建的系统,使用起来方便。
Celery目前爸爸4.x,仅支持Django 1.8以上版本。 Celery 3.1只可以支持Django1.8一下版本。
-
Celery官网http://www.celeryproject.org/
-
优点:
- 简单:调用接口简单易用
- 高可用:客户端、Worker之间连接自动重试,Broker自身支持HA
- 快速:单个Celery进程每分钟可用数以百万计的任务
- 灵活:Celery的每一个部分都能扩展,或直接使用,或用户自己定义。
常用应用
- Celery可用支持实时异步任务处理,也支持任务的定时调度。
- 异步发邮件
- cleery执行队列
- 间隔半小时同步天气信息等
- celery定时操作
- 异步发邮件
角色
- 任务Task:对应一个Python函数
- 队列Queue:待执行任务的队列
- 工人Worker:一个新的进程,负者执行任务
- 代理Broker:负者调度,在任务环境中使用RabbitMQ、Redis等
- Celery需要依靠RabbitMQ等作为消息代理,同时也支持Redis甚至是Mysql、Mongo等,当然,官方默认推荐的是RabbitMQ,如果使用Redis需要配置。
- 本次采用Redis来作为Broker,也是Redis存储任务结果
安装
$ pip install celery==4.2.0
安装对redis的支持,并自动升级相关依赖
$ pip install -U "celery[redis]"
测试
Celery库使用前,必须初始化,所得示例叫做"应用application或app"。应用是线程安全的。不同应用在同一进程中,可以使用不同拍照、不同组件、不同结果
from celery import Celery
app = Celery('mytask')
print(app)
@app.task
def add(x,y):
return x+y
print(add.name) #mytask.add
print(add)
print(app.tasks)
print(app.conf)
print(*list(app.conf.items()),sep = '\n')
- 默认使用amqp链接到本地amqp://guest:**@localhost:5672//
- 本次使用Redis
Redis安装配置
- 使用Epel源的rpm安装
redis安装,使用提供的rpm安装,redis依赖jemalloc
# yum install jemalloc-3.6.0-1.el7.x86_64.rpm redis-3.2.12-2.el7.x86_64.rpm
# rpm -pql redis-3.2.12-2.el7.x86_64.rpm
/etc/logrotate.d/redis
/etc/redis-sentinel.conf
/etc/redis.conf
/usr/bin/redis-cli
/usr/bin/redis-sentinel
/usr/bin/redis-server
/usr/lib/systemd/system/redis-sentinel.service
/usr/lib/systemd/system/redis.service
# 编辑redis配置文件
# vi /ect/redis.conf
port 6379 #启动时的默认端口
bind 192.168.61.109 #redis启动时的主机
protected-mode no #是否开启保护模式
- 启动、停止redis服务
## 启动服务
# systemctl start redis
## 停止服务
# systemctl stop redis
## 添加开机启动
# systemctl enable redis
broker配置使用
- redis链接字符串格式
redis://password@hostname:port/db_number
#指定服务器的redis端口6379,使用0号库
app.conf.broker_url = 'redis://192.168.61.109:6379/0'
Celery使用
- 生成任务
from celery import Celery
import time
app = Celery('mytask')
# print(app)
# print(add.name) #mytask.add
# print(add)
# print(app.tasks)
# print(app.conf)
#配置redis派发任务,任务存放地址
app