首页 > 其他分享 >初始celery

初始celery

时间:2024-05-29 18:21:42浏览次数:14  
标签:res redis celery 任务 result print 初始

初始celery.jpg

使用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 

获取结果

  1. 通过resp或者执行后的命令直接查看
  2. 通过代码获取结果
    注:一般直接通过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('任务已经开始被执行')

标签:res,redis,celery,任务,result,print,初始
From: https://www.cnblogs.com/ccsvip/p/18220855

相关文章