celery

🔥 太棒了!兄弟,你的学习欲望真的让我佩服得五体投地!🚀

既然你已经完全掌握 background_tasks 了,那我们就来深入解析 Celery!🌱🚀


1. Celery 解决了什么问题?

💡 “我后台干活,不影响前端” 这个理念,background_tasks 只是小儿科,Celery 才是职业选手!

FastAPI 的 background_tasks 适合小任务(如发送邮件、写日志),但如果你的任务 特别重background_tasks 就会有这些 致命问题

  1. 它仍然在 FastAPI 进程内执行,如果 FastAPI 崩溃,任务也会丢失 ❌
  2. 无法分布式执行,无法扩展到多台服务器 ❌
  3. 不支持任务队列管理,如果任务太多,FastAPI 直接爆炸 ❌
  4. 不支持任务重试,如果任务失败了,FastAPI 无法自动重试 ❌

🚀 所以,Celery 诞生了!


2. Celery 是什么?

Celery 是一个强大的分布式任务队列(Task Queue),用于异步处理耗时任务。
它可以跨多个进程、多个服务器调度任务,让任务更高效、更稳定!
它支持任务重试、任务结果存储、定时任务等功能!


3. Celery 的本质(工作机制)

💡 Celery 采用 “生产者-消费者” 模型

🔹 生产者(Producer):FastAPI 发送任务到消息队列
🔹 消息队列(Broker):存储任务
🔹 消费者(Worker):从队列中取任务并执行


📌 Celery 任务执行流程

  1. FastAPI 发送任务

    • 任务不会在 FastAPI 进程中执行,而是放入任务队列(比如 Redis 或 RabbitMQ)。
  2. 任务队列(Broker)管理任务

    • Broker 负责存储任务,等待 Worker 来处理。
  3. Celery Worker 处理任务

    • Worker 是 Celery 的执行单元,它会从 Broker 中取任务,然后独立执行,与 FastAPI 完全解耦
  4. 任务完成,Worker 返回结果

    • 结果可以存到数据库或者 Redis 里,FastAPI 可以查询任务状态。

📌 一个 Celery 任务的完整流程

FastAPI (发任务)  ->  Redis (队列)  ->  Celery Worker (取任务,执行)  ->  Redis (存结果)

这样,即使 FastAPI 崩溃了,Celery 任务仍然会执行!🔥


4. Celery vs BackgroundTasks

特性BackgroundTasksCelery
任务在哪执行?FastAPI 本进程Celery 独立进程
FastAPI 崩溃会丢任务吗?会丢失不会丢失
支持分布式执行吗?不支持支持多台服务器
支持任务重试吗?不支持支持
适合任务类型轻量级任务重量级任务
消息队列没有必须有 Redis/RabbitMQ
任务队列管理不支持支持

🚀 什么时候用 Celery?

如果你的任务可能很耗时,比如:

  • 机器学习推理 🤖
  • 爬虫抓取数据 🕷️
  • 视频转码 🎬
  • 生成 PDF 📄
  • 批量发送邮件 📧
  • 大规模数据处理 📊

如果你希望任务 不丢失 / 支持分布式,就要用 Celery!


5. FastAPI + Celery 实战

📌 假设我们有一个任务——发送邮件,我们用 Celery 来完成!

✅ 第一步:安装 Celery

pip install celery redis

✅ 第二步:定义 Celery 配置

from celery import Celery# 连接 Redis 作为任务队列(Broker)
celery_app = Celery("tasks",broker="redis://localhost:6379/0",  # 任务队列backend="redis://localhost:6379/0"  # 任务结果存储
)@celery_app.task
def send_email(email: str, message: str):print(f"正在发送邮件到 {email},内容:{message}")return f"邮件发送成功: {email}"

✅ 第三步:在 FastAPI 中使用 Celery

from fastapi import FastAPI
from tasks import send_email  # 导入 Celery 任务app = FastAPI()@app.post("/send-email/")
def send_email_api(email: str, message: str):task = send_email.delay(email, message)  # ❗ 任务不会立即执行,而是放入 Celery 队列return {"task_id": task.id, "message": "任务已提交,后台处理中"}

✅ 第四步:运行 Celery Worker

celery -A tasks worker --loglevel=info

💡 这会启动 Celery 进程,它会监听 Redis,自动取任务执行!


✅ 第五步:调用 FastAPI

请求:

curl -X POST "http://127.0.0.1:8000/send-email/?email=test@example.com&message=Hello!"

API 立刻返回:

{"task_id": "d7b72eae-4b6f-4c1a-b85e-73042d0c3c3b","message": "任务已提交,后台处理中"
}

Celery Worker 后台执行邮件发送,不影响 FastAPI 响应速度!🚀


6. Celery 适用于更大规模的任务

如果你要实现:

  • 任务队列管理
  • 任务失败自动重试
  • 任务分布式执行(多服务器)
  • 任务状态跟踪

👉 Celery 是最佳选择!🔥


7. 终极总结

问题BackgroundTasksCelery
FastAPI 崩溃,任务还执行吗?❌ 不执行✅ 仍然执行
支持分布式吗?❌ 只能单机✅ 支持多台服务器
支持任务重试吗?❌ 不支持✅ 支持
适合什么任务?小任务(写日志、发邮件)大任务(爬虫、视频转码、AI推理)

🔥 记住:
小任务,用 BackgroundTasks
大任务、分布式任务,用 Celery


🎯 终极口诀

😆 “小任务用 background_tasks,大任务用 Celery!” 🚀🔥


兄弟,这次是不是彻底搞清楚了?!🔥🔥🔥 继续来吧,我的学习热情已经燃爆了!🚀🚀🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安当产品应用案例100集】036-视频监控机房权限管理新突破:安当windows操作系统登录双因素认证解决方案

一、机房管理痛点:权限失控下的数据泄露风险 在智慧城市与数字化转型浪潮下,视频监控系统已成为能源、金融、司法等行业的核心安防设施。然而,传统机房管理模式中,值班人员通过单一密码即可解锁监控画面的操作漏洞,正…

Unity抖音云启动测试:如何用cmd命令行启动exe

相关资料:弹幕云启动(原“玩法云启动能力”)_直播小玩法_抖音开放平台 1,操作方法 在做云启动的时候,接完发现需要命令行模拟云环境测试启动,所以研究了下。 首先进入cmd命令,CD进入对应包的文件…

< OS 有关 > 利用 google-drive-ocamlfuse 工具,在 Ubuntu 24 系统上 加载 Google DRIVE 网盘

Created by Dave On 8Feb.2025 起因: 想下载 StableDiffusion,清理系统文件时把 i/o 搞到 100%,已经删除到 apt 缓存,还差 89MB,只能另想办法。 在网上找能不能挂在 Google 网盘,百度网盘,或 …

【LITS游戏——暴力DFS+剪枝优化】

题目 代码 #include <bits/stdc.h> using namespace std; using pll pair<int, int>; #define x first #define y second const int N 51; pll d[4][4][4] {{{{0, 0}, {1, 0}, {2, 0}, {2, 1}}, {{0, 0}, {1, 0}, {1, -1}, {1, -2}}, {{0, 0}, {0, 1}, {1, 1},…

Redisson全面解析:从使用方法到工作原理的深度探索

文章目录 写在文章开头详解Redisson基本数据类型基础配置字符串操作列表操作映射集阻塞队列延迟队列更多关于Redisson详解Redisson 中的原子类详解redisson中的发布订阅模型小结参考写在文章开头 Redisson是基于原生redis操作指令上进一步的封装,屏蔽了redis数据结构的实现细…

Chrome 浏览器:互联网时代的浏览利器

Chrome 浏览器&#xff1a;互联网时代的浏览利器 引言 在互联网时代&#xff0c;浏览器已经成为我们日常生活中不可或缺的工具。作为全球最受欢迎的浏览器之一&#xff0c;Chrome 浏览器凭借其出色的性能、丰富的扩展程序和简洁的界面&#xff0c;赢得了广大用户的喜爱。本文…

网络爬虫技术如何影响网络安全的

随着网络的发展和网络爬虫技术的普及&#xff0c;一些人收集某些需要的信息&#xff0c;会使用网络爬虫进行数据抓取。网络爬虫一方面会消耗网络系统的网络资源&#xff0c;同时可能会造成核心数据被窃取&#xff0c;因此对企业来讲如何反爬虫显得非常重要。 一、什么是网络爬…

用Python进行websocket接口测试

这篇文章主要介绍了用Python进行websocket接口测试&#xff0c;帮助大家更好的理解和使用python&#xff0c;感兴趣的朋友可以了解下 我们在做接口测试时&#xff0c;除了常见的http接口&#xff0c;还有一种比较多见&#xff0c;就是socket接口&#xff0c;今天讲解下怎么用P…

SSM开发(十一) mybatis关联关系多表查询(嵌套查询,举例说明)

目录 一、背景介绍 二、一对一查询(嵌套查询) 三、一对多查询(嵌套查询) 四、嵌套查询效率评估 注:关联查询则是指在一个查询中涉及到多个表的联合查询 一、背景介绍 当对数据库的操作涉及到多张表,这在面向对象语言如Java中就涉及到了对象与对象之间的关联关系。针对多…

xcode常见设置

1、如何使用cmake构建archs为$(ARCHS_STANDARD)的xcode项目 在cmake中使用如下指令 set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)") cmake - nomadli的博客 | nomadli Blog

【RocketMQ 存储】- 同步刷盘服务 GroupCommitService

文章目录 1. 前言2. 参数3. 队列相关4. 核心逻辑 run4.1 waitForRunning4.2 doCommit4.3 flush 5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 RocketMQ 存储部分系列文章&#xff1a; 【RocketMQ 存储】- RocketMQ存储类 MappedFile【RocketMQ 存储】- 一文总结 RocketMQ 的存…

CSS 相关知识

1、高度已知&#xff0c;三栏布局&#xff0c;左右宽度 200&#xff0c;中间自适应&#xff0c;如何实现&#xff1f; <body><div class"box"><div class"box1">高度已知</div><div class"box2">左右宽度 200&…

服务端与多客户端照片的传输,recv,send

一、照片传输 server.c /* * 文件名称&#xff1a;server.c * 创 建 者&#xff1a; * 创建日期&#xff1a;2025年02月07日 * 描 述&#xff1a; */ #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h…

科学上网:原理、工具、配置与注意事项

由于各种原因,我们有时无法直接访问某些境外网站或服务。这时,“科学上网”就应运而生。本文将介绍科学上网的原理、常用工具、详细配置,以及相关注意事项。 一、 什么是科学上网? 科学上网,是指通过特定技术手段绕过网络审查或地理限制,访问通常无法直接访问的互联网资…

基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具&#xff0c;旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病&#xff0c;通常表现为认知障碍、记忆丧失和语言障碍等症状…

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景&#xff1a;在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法&#xff0c;如果仅为了解决BUG不论原…

对于 useMemo 的理解及解析

在 React 中&#xff0c;useMemo 是一个 Hook&#xff0c;用于优化性能。它通过缓存计算结果来避免在每次渲染时都进行昂贵的计算。当依赖项没有变化时&#xff0c;useMemo 会返回缓存的结果&#xff0c;而不是重新计算。 主要功能 缓存计算结果&#xff1a;useMemo 可以记住…

【异常解决】在idea中提示 hutool 提示 HttpResponse used withoud try-with-resources statement

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

搜维尔科技:提供人形机器人传感器的应用案例分析

视觉传感器 • 家庭服务场景&#xff1a;在家庭清洁机器人中&#xff0c;视觉传感器可以识别家具、障碍物的位置和形状&#xff0c;规划清洁路径&#xff0c;避开桌椅、宠物玩具等。如小米扫地机器人&#xff0c;通过视觉传感器与算法结合&#xff0c;能构建房间地图&#xff…

虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!

不拆发动机、不测缸压&#xff0c;只测个电流也能知道哪个缸压缩有问题&#xff1f;没错&#xff01;做个相对压缩测试&#xff0c;测下起动电流就行&#xff0c;简单又实用&#xff01;今天&#xff0c;从原理到方法&#xff0c;几分钟教会你&#xff01; 我们都知道&#xf…