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

相关推荐
mit6.8241 小时前
archived
后端·python·flask
mit6.82419 小时前
AKS--Azure Managed Kubernetes
kubernetes·flask·azure
weixin_BYSJ19873 天前
springboot医疗信息管理系统---附源码17465
java·javascript·spring boot·python·django·flask·php
运维行者_4 天前
网络监控与ITSM集成:从告警到工单,实现运维自动化闭环
开发语言·网络·分布式·后端·架构·flask·php
way_hj4 天前
Flask笔记(2)快速web项目
笔记·flask·vue·web
海盗12344 天前
微软技术日报——2026-08-07
python·microsoft·flask
weixin_BYSJ19874 天前
【java项目分享】springboot阅读推荐平台10600
java·javascript·spring boot·python·django·flask·php
Vec‑Jie5 天前
MerchantOps-KBQA 实践(十四):本地运行、性能限制与可验证的交付边界
人工智能·后端·python·flask
mqiqe7 天前
LLM Gateway:企业级大模型应用的“统一控制平面”
平面·flask·gateway
aGdF8E3gQ7 天前
【Application Insights】采样率对Function App日志收集的影响和解决方法
python·flask·wpf