目录:
一. 系统及软件版本
二. 软件安装
三. celery部件组成
四. 实例项目
4.1 项目代码内容讲解
4.2 前台方式启动项目
4.3 后台方式启动项目
五. 实例代码
一. 系统及软件版本
linux => centos6.5
python=>3.6.5
celery=>4.3.0
redis=>2.8.10
任务中使用的redis=>2.10.6(即pip3 install redis==2.10.6)【注解:pip3安装的redis版本和redis软件的版本不对应,我尝试过安装redis为2.10.6版本的软件,发现redis没有这个版本;这点不用纠结,上面提到的redis是指redis软件,而pip3安装的redis是python调用redis使用的包,是两个不一样的东西,版本不对应是正常的】
rabbitmq=>3.6.10
二. 软件安装
我的习惯是软件都下载在/usr/local/src 目录下,大家各自按照自己的习惯来
1. 安装rabbitmq
rabbitmq的安装可以访问 https://blog.csdn.net/qq_40238199/article/details/82258066 这个博文,该博文作者描写的很详细很清楚,以下命令都摘录自该博文
1.1 先安装erlang
1). 下载安装包 wget http://erlang.org/download/otp_src_20.0.tar.gz
2). 解压安装包 tar -zxvf otp_src_20.0.tar.gz
3). 安装erlang需要的依赖包
a. yum install ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel -y
b. yum install openssl-devel zlib-devel –y
c. yum -y install make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel
4). 进入解压后的目录 cd ./opt_src_20.0
执行命令 ./configure --prefix=/opt/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac
5). 安装 make&&make install
6). 建立软链接 ln -s /opt/erlang/bin/erl /usr/local/bin/erl
7). 配置环境 vi /etc/profile
ERLANG_HOME=opt/erlang
PATH=$ERLANG_HOME/bin:$PATH
export ERLANG_HOME
export PATH
使配置的环境生效 source /etc/profile
1.2 安装rabbitmq
1). 下载安装包 wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz
2). 解压安装包
xz -d rabbitmq-server-generic-unix-3.6.10.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.10.tar
3). 进入解压后的目录后
cd sbin
./rabbitmq-server
或者后台启动
直接启动 ./rabbitmq-server
后台启动 ./rabbitmq-server -detached
开启插件管理页面 ./rabbitmq-plugins enable rabbitmq_management
关闭服务 ./rabbitmqctl stop
4). 创建用户admin 密码admin00
./rabbitmqctl add_user admin admin00
./rabbitmqctl set_user_tags admin administrator
./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
5). 在浏览器上登录 http://[IP]:15672
2. 安装redis
cd /usr/local/src
wget http://download.redis.io/releases/redis-2.8.10.tar.gz
tar -zxvf redis-2.8.10.tar.gz
cd redis-2.8.10
make
make install
创建目录 /etc/redis
mkdir -p /etc/redis
将redis-2.8.10【/usr/local/src/redis-2.8.10】目录下的 redis.conf 复制到 /etc/redis 目录下
cp redis.conf /etc/redis/
vim /etc/redis/redis.conf
daemonize 把 no 改成 yes
说明:
a、默认情况Redis不是在后台运行,我们需要修改把redis放在后台运行:daemonize yes
b、redis安全策略默认本机访问,所以远程访问的话需要将 bind 127.0.0.1加#注释掉
启动redis
/usr/local/bin/redis-server /etc/redis/redis.conf
3. 安装celery
pip3 install celery==4.3.0
4. python3 安装网上到处都是,这里就不描述了
三. celery部件组成
broker => rabbitmq
backend => redis
四. 实例项目
4.1 项目代码内容讲解
项目名: proj
目录:/mnt/celeryTest
完整的项目目录:
proj/
-__init__.py # 这个文件里是空的,不用理它,如果没有这个文件保险起见建一个空的
-celery.py # celey的配置项都在这里
-tasks00.py # 具体的任务文件
-tasks01.py # 具体的任务文件,为了表示任务可以分布在不同的文件里以便后期任务多了可以分类管理,这里写了两个任务文件
celery.py
from __future__ import absolute_import,unicode_literals # 这句主要是为了避免同名包冲突的问题
from celery import Celery
from celery.schedules import crontab # 这个包主要是用了配置定时器
app = Celery('proj',
broker='amqp://[rabbitmq账号]:[rabbitmq密码]@[rabbitmq所在的服务器IP]:[rabbitmq的端口默认为5672]//',
backend='redis://[redis所在的服务器IP]:[redis的端口默认为6379]/[redis的数据库为0-15]',
include=['proj.tasks00','proj.tasks01'])
app.conf.update(
result_expires=3600,
)
app.conf.beat_schedule={
'every_5_min':{
'task':'proj.tasks00.fun00',
'schedule':crontab(minute='*/5')
},
'every_day_8':{
'task':'proj.tasks01.fun01',
'schedule':crontab(minute='0',hour='8',day_of_week='*',day_of_month='*',month_of_year='*')
}
}
app.conf.timezone = 'Asia/Shanghai'
if __name__ == '__main__':
app.start()
tasks00.py
from __future__ import absolute_import,unicode_literals
from proj.celery import app
@app.task
def fun00():
print('Hello everyone, I'm fun00')
tasks01.py
from __future__ import absolute_import,unicode_literals
from proj.celery import app
@app.task
def fun01():
print('Hello everyone, I'm fun01')
4.2 前台方式启动项目
1). 启动定时器
cd 到目录 /mnt/celeryTest
执行命令 celery -A proj beat
2). 启动工作者
cd 到目录 /mnt/celeryTest
执行命令 celery -A proj worker -l info
4.3 后台方式启动项目
后台启动的方式需要做些设置
第一步:vim /etc/default/celeryd
CELERYD_NODES="root" #节点名,这个可以随意取了名字
CELERY_BIN="/usr/bin/celery" #celery命令的绝对路径,不知道的可以使用whereis celery查找
CELERY_APP="proj" # celery的项目名,和celery.py中配置的项目一致
CELERYD_CHDIR="/mnt/celeryTest" # celery项目所在的路径
CELERYD_OPTS="