前言
使用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所在目录执行这条命令。)
使用 python 虚拟环境 模拟两个不同的 主机。
此时会看见一对输出。包括注册的任务啦。
#3. 客户应用程序的调用。
3.1 交互式客户端程序调用方法
打开一个命令行,进入Python环境。
调用 delay 函数即可启动 add 这个任务。这个函数的效果是发送一条消息到broker中去,这个消息包括要执行的函数、函数的参数以及其他信息,具体的可以看 Celery官方文档。这个时候 worker 会等待 broker 中的消息,一旦收到消息就会立刻执行消息。
启动了一个任务之后,可以看到之前启动的worker已经开始执行任务了。
现在是在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命令行可以看见celery执行的日志。打开 backend的redis,也可以看见celery执行的信息。
实例二:
首先要有一个main文件
再者要有一个config文件
然后就是任务执行文件
如图 celery的目录
main.py 文件
config.py文件
tasks.py文件
最后
celery服务的开启命令
celery -A celery_tasks.email.tasks worker -l info
注意:celery_tasks.email.tasks 是该函数执行的路径 填写正确才能启动celery服务