celery框架|环境搭建及测试[celery+rabbitmq+redis]
https://blog.csdn.net/geniusle201/article/details/86135282?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control
1. celery 简介
关于celery的简介,网上一大堆,在此不做赘述。
举个不太恰当的例子来作说明。celery就是一个服务团队,进入一家餐馆开始服务后,他的厨子在不停地做菜,前台有多个顾客不停地在吃,只要桌子上没有菜了,就会有新做好的端上来,直至所有的菜都被吃完为止。
后台的厨子叫做broker,顾客叫做worker,而用来临时存放饭菜的桌子叫做消息队列(message queue),而洗碗池(此例中每名顾客吃完都会产生一个脏的盘子)叫做backend。
以分布式爬虫为例,当确定任务后,由broker将多个任务推送至消息队列,然后多个分布式的小爬虫不停地从消息队列中获取子任务进行执行,并将执行的结果存放至backend中。
这就是分布式框架celery的基本原理,简单吧?
非常值得一提的是,celery是个服务团队(框架),不是一家餐馆(程序),他不自带桌子(消息队列),也不提供洗碗池(backend),他只是面向这些桌子和洗碗池提供服务。在他的官网文档中推荐了一些目前服务对接比较稳定的桌子(消息队列)和洗碗池(backend),我摘录过来,如下所示。
至于backend,个人推荐redis.
2. celery 安装及部署
2.1 celery 安装
首先通过pip安装(python3请通过pip3安装):
pip install celery
- 1
然后在python代码中导入即可使用:
from celery import Celery
- 1
后面要在terminal中启用celery,需执行如下命令:
sudo apt install python-celery-common
- 1
2.2 rabbitmq 安装
执行如下命令即可安装rabbitmq:
//安装rabbitmq
sudo apt install rabbitmq-server
//开启rabbitmq一些需要用到的插件
sudo rabbitmq-plugins enable rabbitmq_management
//添加用户及密码
sudo rabbitmqctl add_user admin admin
//添加虚拟host
sudo rabbitmqctl add_vhost myvhost
//设置虚拟host的权限
sudo rabbitmqctl set_permissions -p myvhost admin '.*' '.*' '.*'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
完成以上步骤后,打开浏览器,访问 http://127.0.0.1:15672 并登录,即可进入rabbitmq管理后台。如下图所示:
注意,这里很重要,如下图所示:
1.看好这几个路径的位置,后续开发中要经常查看日志和配置文件,路径也可以改为自己想用的。
2.记住这几个不同的监听的端口,比如:如果用celery访问rabbitmq则需访问5672,浏览器访问则是15672。
3. run起一个简单的demo
3.1 tasks.py 文件
import time
from celery import Celery
brokerUrl = 'amqp://admin:admin@localhost:5672/myvhost'
app = Celery('tasks',broker=brokerUrl)
@app.task
def add(x,y):
print('sleep 2 seconds...')
time.sleep(2)
return x+y
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3.2 在terminal中调用celery:
进入到tasks.py所在的目录,执行:
celery -A tasks worker --loglevel=info
//参数说明:-A参数表示的是Celery APP的名称,这个实例中指的就是tasks.py,后面的tasks就是APP的名称
//worker是一个执行任务角色,loglevel=info记录日志类型默认是info
//这个命令启动了一个worker,用来执行程序中add这个加法任务(task)
- 1
- 2
- 3
- 4
会看到如下反馈则说明已经启动了一个worker:
3.3 调用woker并查看执行情况
写一个简单的 callworker.py 文件:
from celery import Celery
from tasks import add
add.delay(3,4)
add.delay(4,4)
- 1
- 2
- 3
- 4
运行 callworker.py,然后查看之前加载celery worker的那个terminal,可以看到刚才的callworker.py中的命令已被执行。反馈如下所示:
至此,一个简单的celery框架安装部署、demo测试完成。