Celery的使用(1)---简单配置与初次运行

前言

celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架, 是一个分布式队列的管理工具, 可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列.。它采用了典型的生产者-消费者模型,主要由三部分组成:

  • 消息队列broker:broker实际上就是一个MQ队列服务,可以使用Redis、RabbitMQ等作为broker;

  • 处理任务的消费者workers:broker通知worker队列中有任务,worker去队列中取出任务执行,每一个worker就是一个进程;

  • 存储结果的backend:执行结果存储在backend,默认也会存储在broker使用的MQ队列服务中,也可以单独配置用何种服务做backend;

在这里插入图片描述

celery安装

pip install celery

celery 简单运行

创建文件

安装完成后在自己的APP下创建一个tasks.py文件,名字最好就是tasks,不要随意更改,有多个app则每个app下都可以创建一个task.py(前提是有需要的话)目录结构如下,本文已django为例:

my_demo
    |--func_app
        |-- admin.py
        |-- apps.py
        |-- __init__.py
        |-- models.py
        |-- tasks.py
        |-- tests.py
        |-- urls.py
        |-- views.py
    |--my_demo
        |-- celery.py
        |-- __init__.py
        |-- settings.py
        |-- urls.py
        |-- wsgi.py
tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://:password@host:port/database_num',backend='redis://:password@host:port/database_num')
#第一个次数‘tasks’是当前模块的名字,第二个参数是broker代理的url,这里选用了redis

第一个参数 ‘tasks’ 是当前模块的名字,第二个参数是消息队列broker的url,第三个参数是存放结果的backend,这里都选用了redis(也可以是RabbitMQ)。

编写第一段celery代码

tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://:password@host:port/database_num',backend='redis://:password@host:port/database_num')
@app.task
def add(x, y):
    return x + y
if __name__ == '__main__':
    res = add.delay(3,4)
    print(res.result)#打印结果

定义一个简单的add函数,使用delay()方法进行调用,res.result 返回celery计算的结果,先不要急着运行,这样肯定运行不成功的。

为运行程序准备环境(已经具备了可跳过)

接下来我们去坐准备工作,一般我们的服务都会部署到linux服务器上,假设你现在已经有一台自己的服务器,那么请使用SecureCRT或者putty连接上机器,还是先安装redis和celery,快捷安装如下:

Redis安装——-10分钟安装配置Redis

pip install celery

创建一个目录专门用于执行celery程序(位置随你高兴),再创建一个tasks.py:

  mkdir celery_code#创建目录
  cd celery_code#进入目录下面
  touch tasks.py #创建tasks.py文件,功能与刚才上面的一样
  vi tasks.py  #打开文件

运行celery

vi tasks.py 后按下键盘上的i键,复制刚才的代码粘贴进这个文件,按下ESCSHIFT+:,输入wq保存退出,分别输入以下命令。

  chmod +x tasks.py  #给tasks.py赋予可执行权限
  celery -A tasks worker --loglevel=info    ##运行celery

如果顺利的话,你将看到如下界面:
在这里插入图片描述

运行程序

忽略最后一行,这就代表启动成功了,接着你可以在你的window开发环境上运行程序了,运行后应该能看到如下:
Linux:
在这里插入图片描述
可以清楚的看到celery在Received到task后很快woker就开始工作,返回了tasks.add执行success,tasks即我们的模块名称,add为我们定义的方法名,success代表执行成功,后面的一串小数即为执行的时间,7为我们想要的执行结果。

Windows: 在这里插入图片描述
而我们pycharm下同样也返回了结果7,执行成功!!!

后续

这时如果你有兴趣的话可以登录redis查看broker和backend:

redis-cli #连接redis客户端
select database_num  #为你在前面配置的worker和backend的数据库编号
keys *  #查看执行过的任务编号

在这里插入图片描述
仔细查看最后标红的一行,如果与前面运行程序中的celery结果图对比就会发现,后面的编号其实是一样的,可以断定这就是我们刚才运行的任务编号,这时就可以根据这个key查询celery返回的信息。

在这里插入图片描述
截图可能不太清晰,但依然能看到状态status是success,result是7,task_id是上图标红的那串。

结束

本文介绍了怎么安装运行celery,当然本文中所使用的的add函数是极为简单的,后续将更新配置文件化和较常用的celery发送邮件、celery定时任务,更多内容请点击从今天开始种树


   转载规则


《Celery的使用(1)---简单配置与初次运行》 罗华 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录