使用celery前的一些注意事项
res = add.delay(x,y)
print(res.id) # 这个id才是真正的任务id
# 安装
pip install celery
# 安装redis(消息队列和结果存储使用redis)
pip install redis
# windows安装,mac和Linux不需要安装下面的包
pip install eventlet
# 官网解释
# Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform。
celery提交任务的几种方式
1. 任务名.apply_async(args=(参数,)) # 这里是元组
2. 任务名.delay(参数)
3. 定时任务,通过配置文件
快速使用
新建一个py文件,写如下代码
from celery import Celery
import time
borker = "redis://127.0.0.1:6379/1" # redis的第一个库 存储消息队列
backend = "redis://127.0.0.1:6379/2" # redis的第二个库 存储结果
# 创建一个celery应用
app = Celery(__name__, broker=borker, backend=backend)
# 使用@app.task装饰器装饰后才能算celery的任务,才会被提交到broker队列中,不然只是一个普通的函数
@app.task
def add(x, y):
time.sleep(5)
return x + y
@app.task
def send_sms(mobile, code=None):
print(f"手机号{mobile}验证码{code}发送成功。")
# 注意 将任务提交到broker中进来不要在任务模块中去提交,应该重写写一个py文件去用来提交任务。
新建另外一个添加任务的py文件
from celerydemo import add
# 同步任务
# 做演示 不使用
# res = add(x=4, y=5)
# print(res) # 登录5秒执行
# 提交到broker消息队列中,然后通过worker去执行 --> 异步
res = add.delay(x=4, y=5)
print(res) # 016505e9-d192-4d10-9508-3bb64c5be953 这个id号是唯一的
# 这个 res 是一个AsyncResult对象,它代表了异步任务的执行结果。
# 是立马返回的,相当于任务的id号,任务被提交到消息中间件 --> 这里是redis
# 通过这个对象,您可以获取任务的执行状态、结果值以及其他相关信息
查看提交的任务
通过resp查看即可,选择对应的库
提交任务
# 通过命令启动worker
# win启动
celery -A 模块名称 worker -l 日志级别 -P eventlet
eclery -A run worker -l debug -P eventlet
# mac linux
celery -A main worker -l info
获取结果
- 通过resp或者执行后的命令直接查看
- 通过代码获取结果
注:一般直接通过res.get() 获取就可以了
# 通过代码,拿到结果
# 直接复制粘贴使用就行了
from celery_demo import app # 这个app 就是
from celery.result import AsyncResult
id = 'd0ae78c8-9a8e-4f93-9d32-b17d4e295fe9' # 这个就是刚刚的res转成字符串
if __name__ == '__main__':
result = AsyncResult(id=id, app=app)
if result.successful():
result = result.get()
print(result)
elif result.failed():
print('任务失败')
elif result.status == 'PENDING':
print('任务等待中被执行')
elif result.status == 'RETRY':
print('任务异常后正在重试')
elif result.status == 'STARTED':
print('任务已经开始被执行')