前言

使用celery包含三个方面:1. 定义任务函数。2. 运行celery服务。3. 客户应用程序的调用。

实例一:

#1. 定义任务函数

创建一个文件 tasks.py输入下列代码:

from celery import Celery #导入Celery

broker = 'redis://127.0.0.1:6379/5' # 设置broker

backend = 'redis://127.0.0.1:6379/6' # 设置backend

app = Celery('tasks', broker=broker, backend=backend) # 实例化celery

# 编写任务
@app.task
def add(x, y): return x + y

上述代码导入了celery,然后创建了celery 实例 app,实例化的过程中指定了任务名tasks(和文件名一致),传入了broker和backend。然后创建了一个任务函数add

#2. 运行celery服务

下面启动celery服务。在当前命令行终端运行(分别在 env1 和 env2 下执行):

celery -A tasks worker  --loglevel=info

目录结构 (celery -A tasks worker --loglevel=info 这条命令当前工作目录必须和 tasks.py 所在的目录相同。即 进入tasks.py所在目录执行这条命令。

celery 基础教程(二):简单实例-LMLPHP

使用 python 虚拟环境 模拟两个不同的 主机。

celery 基础教程(二):简单实例-LMLPHP

此时会看见一对输出。包括注册的任务啦。

#3. 客户应用程序的调用。

3.1 交互式客户端程序调用方法

打开一个命令行,进入Python环境。

celery 基础教程(二):简单实例-LMLPHP

调用 delay 函数即可启动 add 这个任务。这个函数的效果是发送一条消息到broker中去,这个消息包括要执行的函数、函数的参数以及其他信息,具体的可以看 Celery官方文档。这个时候 worker 会等待 broker 中的消息,一旦收到消息就会立刻执行消息。

启动了一个任务之后,可以看到之前启动的worker已经开始执行任务了。

celery 基础教程(二):简单实例-LMLPHP

现在是在python环境中调用的add函数,实际上通常在应用程序中调用这个方法。

注意:如果把返回值赋值给一个变量,那么原来的应用程序也会被阻塞,需要等待异步任务返回的结果。因此,实际使用中,不需要把结果赋值。

3.2应用程序中调用方法

新建一个 main.py 文件 代码如下:

from tasks import add

r = add.delay(2, 2)

r = add.delay(3, 3)

print(r.ready())

print(r.result)

print(r.get())

celery 基础教程(二):简单实例-LMLPHP

在celery命令行可以看见celery执行的日志。打开 backend的redis,也可以看见celery执行的信息。

实例二:

首先要有一个main文件

再者要有一个config文件

然后就是任务执行文件

如图 celery的目录

celery 基础教程(二):简单实例-LMLPHP

main.py 文件

celery 基础教程(二):简单实例-LMLPHP

config.py文件

celery 基础教程(二):简单实例-LMLPHP

tasks.py文件

celery 基础教程(二):简单实例-LMLPHP

最后

celery服务的开启命令

celery -A celery_tasks.email.tasks worker -l info

注意:celery_tasks.email.tasks 是该函数执行的路径 填写正确才能启动celery服务

05-12 03:57