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

相关推荐
编码者卢布14 小时前
【Azure APIM】APIM的诊断日志与Application Insights的日志是否可以串联为一个端到端的日志链路呢?
python·flask·azure
weixin_BYSJ19872 天前
django在线图书销售平台---附源码16192
java·javascript·spring boot·python·django·flask·php
不瘦80斤不改名4 天前
全家桶、乐高积木与类型引擎:重新认识 Django、Flask 与 FastAPI
django·flask·fastapi
Leinwin4 天前
GPT-5.6 提示词编写范式重构:从“保姆式指令“到“四要素框架“的工程实践
后端·python·flask
编码者卢布6 天前
【Azure Application Insights】公网白名单应用如何使用 Application Insights 可用性测试?
flask·azure·可用性测试
会飞锦鲤7 天前
基于YOLOv10的瓜果成熟度智能检测系统
人工智能·python·深度学习·yolo·flask
许彰午9 天前
85_Python Flask开发RESTful API
python·flask·restful
2401_894915539 天前
Geo搜索优化排名源码部署搭建全流程详解
android·开发语言·flask·php·精选
江华森10 天前
深入理解 Flask 实现原理
后端·python·flask
weixin_BYSJ198711 天前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php