flask 》》celery 异步任务


celery 简单案例 》》以redis 为例,

csharp 复制代码
# pip install "celery[redis]"
这个命令,是为了帮你一次性地把 Celery 和它使用 Redis 时需要的额外依赖都装上
这是 pip 提供的一个"可选依赖"安装方式。这里的 [redis] 被称为"extra",它告诉 pip,在安装 Celery 主程序外,还需要安装专门为 Redis 准备的一组附加的 Python 库。



csharp 复制代码
## 项目结构
kaizen_celery/
├── tasks.py          # 
└── produce.py 
└── consumer.py 


#  task.py
from celery import Celery
import time
backend='redis://127.0.0.1:6379/1'
broker='redis://127.0.0.1:6379/2'
##### 创建 Celery 应用实例=======
#    name :    应用名称
#    broker:消息中间件地址,此处使用 Redis
#    backend:任务结果存储地址,此处也使用 Redis(可选)
cel = Celery(
  	'celery',           # 应用名称
  	broker=broker,      # 任务队列地址
	  backend=backend     # 结果存储地址
 )
@cel.task
def send_msg(user,msg):
    print(f"准备向用户{user}发送消息")   # 该输出会显示在 worker 日志中
    time.sleep(5)
    print(f"消息发送成功,内容:{msg}")  # 该输出会显示在 worker 日志中
    return "OK"

# produce.py
from tasks import  send_msg

# 异步调用:不等待结果,立即返回AsyncResult对象
result = send_msg.delay("Kaizen","恭喜你")   #  相当于 send_msg.delay("Kaizen","恭喜你") 放入队列
print(result.id)                            #  返回任务唯一ID
# 检查任务是否完成
result.ready()   #   Fasle  表示尚未执行完   True  表示执行完毕
# 获取结果,会阻塞直到任务完成   timeout 是可选参数
result.get(timeout=10)     # 等待最多10S, 如何超过10S 还没返回 则抛异常  celery.exceptions.TimeoutError

#常用任务调用方式 对比
send_msg.delay(x,y) 															   异步发送任务,立即返回AsyncResult    不阻塞
send_msg.apply_async(args=[x,y],countdown=10) 				 延迟10s后执行                      不阻塞
send_msg.apply_async(args=[x,y],queue='high_priority') 指定队列                           不阻塞
send_msg(x,y)                                          直接同步调用,不走worker,本地执行     阻塞
=========================================


# consumer.py
from celery.result import AsyncResult
from tasks import  cel

async_result = AsyncResult(id="上面produce返回的id",app=cel)

if async_result.successful():
    result = async_result.get()
    print(result)

elif async_result.failed():
    print('执行失败')
elif async_result.status =="PENDING":
    print("任务等待中")
elif async_result.status =="RETRY":
    print("任务异常,正在重新尝试")
elif async_result.status =="STARTED":
    print("任务执行中")


# 启动 Celery Worker
# 需要先安装 pip install eventlet
celery  -A  tasks  worker --loglevel=info -P eventlet

启动 Celery worker



RabbitMQ

rabbit MQ

相关推荐
KivenMitnick11 小时前
CialloVOL 1.2:便捷好用的轻量化内存取证分析平台
windows·python·安全·网络安全·flask·系统安全·安全威胁分析
Ares-Wang13 小时前
flask 》》内置HTMLParser
后端·python·flask
软泡芙13 小时前
【.NET】创建一个ai聊天应用
人工智能·flask·.net
计算机软件程序设计2 天前
Python Flask工程目录解读
python·flask·工程目录解读
Ares-Wang2 天前
Flask》》 Flask-OpenID 认证、 OpenID Connect (OIDC)
后端·python·flask
大龄程序员狗哥2 天前
第30篇:使用Flask部署你的第一个AI模型——打造简易Web API(项目实战)
前端·人工智能·flask
尘世壹俗人2 天前
知识点13---k8s存储持久化
容器·kubernetes·flask
源码之家3 天前
计算机毕业设计:Python股票智能分析预测平台 Flask框架 数据分析 可视化 机器学习 随机森林 大数据(建议收藏)✅
python·机器学习·数据分析·django·flask·课程设计
B站_计算机毕业设计之家3 天前
计算机毕业设计:Python股票投资辅助决策系统 django框架 request爬虫 协同过滤算法 数据分析 可视化 大数据 大模型(建议收藏)✅
爬虫·python·深度学习·算法·django·flask·课程设计