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

相关推荐
兵慌码乱4 天前
请销假管理系统的分层架构设计与核心模块实现
flask·sqlalchemy·python web·apscheduler·web 系统架构·假期管理系统·审批工作流
TechWayfarer13 天前
苏超赛事网站安全防护:WAF、DDoS与仿冒页面如何联动治理
网络·python·安全·flask·ddos
vortex513 天前
新手前后端开发学习指南:从Flask框架到全栈实践
后端·python·flask
叫我:松哥13 天前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
chushiyunen14 天前
langchain4j笔记、tools
笔记·python·flask
叫我:松哥14 天前
基于机器学习的中文文本抑郁症风险检测系统,包括NLP与传统机器学习的抑郁症识别,准确率92%
人工智能·深度学习·机器学习·自然语言处理·flask·nlp·bootstrap
TechWayfarer14 天前
查IP归属地接入实战:保险理赔如何做动态风险监控与预警
网络·python·tcp/ip·安全·flask
2601_9618752414 天前
花生十三资源盘|电子版|全科
python·django·flask·virtualenv·scikit-learn·pygame·tornado
叫我:松哥14 天前
基于Flask的在线考试刷题系统设计与实现,集智能练习、过程追踪、深度分析与个性化引导
数据库·人工智能·后端·python·flask·boostrap
abcy07121316 天前
flask hdfs 异步上传图文教程csdn
python·flask