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

相关推荐
高级程序源3 天前
django招聘网站信息爬取与分析系统79704-计算机课程设计、毕业设计
后端·python·mysql·小程序·django·flask·课程设计
lpfasd1234 天前
配置文件格式对比 与 AI Coding 的选择逻辑
python·flask·numpy
troy1285 天前
Python 基础语法(九):Django/Flask/FastAPI 三大 Web 框架详细对比解析
python·jupyter·django·flask·github·fastapi
小白学大数据5 天前
Python 项目实战:用 Flask 构建生产级 MySQL 增删改查 REST API
开发语言·人工智能·python·mysql·flask
典典分享指南6 天前
用飞书 Wiki 搭内容作战室:从零搭建团队内容协作中枢
django·flask·numpy·pyqt
life码农7 天前
python框架Flask多语言配置示例
python·flask
毕业设计7038 天前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
深圳市尚想信息技术有限公司9 天前
HITENX海速芯TM52F1363-SSOP24 8KB Flash存储+EEPROM,国产8位MCU单片机
单片机·mcu·flask·芯片·控制器·海速芯
李高钢10 天前
Python Flask 框架入门:从零搭建你的第一个 Web 应用
前端·python·flask
半亩码田11 天前
【.NET新特性·第17篇】EF Core 10 与 Aspire 13.1
python·flask·.net