当前位置: 首页 > article >正文

python Celery 是一个基于分布式消息传递的异步任务队列系统

Celery 是一个基于分布式消息传递的异步任务队列系统,主要用于处理耗时任务、定时任务和周期性任务。它能够将任务分配到多个工作节点(Worker)上执行,从而提高应用程序的性能和可扩展性。Celery 是 Python 生态中最流行的任务队列工具之一,广泛应用于 Web 开发、数据处理、机器学习等领域。

 核心概念

1. 任务(Task):
    任务是 Celery 的基本执行单元,通常是一个 Python 函数。
    任务可以是同步的,也可以是异步的。异步任务会被放入任务队列中,由 Worker 执行。

2. 消息队列(Broker):
    Celery 使用消息队列来传递任务。常见的消息队列包括:
      RabbitMQ(推荐)
      Redis
      Amazon SQS
    任务会被发送到消息队列中,等待 Worker 处理。

3. Worker:
    Worker 是执行任务的进程。它会从消息队列中获取任务并执行。
    可以启动多个 Worker 来提高并发处理能力。

4. 后端(Backend):
    后端用于存储任务执行的结果。常见后端包括:
      Redis
      RabbitMQ
      数据库(如 PostgreSQL、MySQL)
    任务执行完成后,结果会被存储在后端中,供后续查询。

5. 定时任务(Periodic Tasks):
    Celery 支持定时任务和周期性任务,通常与 Celery Beat 结合使用。
    可以通过配置文件或代码定义任务的执行时间。

 主要特点

1. 异步执行:
    将耗时任务(如发送邮件、处理文件、调用外部 API)放入任务队列中异步执行,避免阻塞主程序。

2. 分布式:
    支持多台机器上的 Worker 协同工作,适合高并发场景。

3. 可扩展:
    通过增加 Worker 的数量,可以轻松扩展任务处理能力。

4. 定时任务:
    支持定时任务和周期性任务,适合定时数据同步、报表生成等场景。

5. 任务重试:
    支持任务失败后的自动重试机制,提高任务的可靠性。

6. 结果存储:
    任务执行结果可以存储在后端中,方便查询和后续处理。

 典型应用场景

1. Web 开发:
    处理耗时请求,如发送邮件、生成 PDF、处理上传文件等。
    例如,用户注册后异步发送欢迎邮件。

2. 数据处理:
    处理大量数据,如数据清洗、数据分析、机器学习模型训练等。

3. 定时任务:
    定时执行任务,如每天凌晨生成报表、定时备份数据等。

4. 分布式计算:
    将任务分发到多台机器上执行,适合大规模计算任务。
 

基本使用示例

以下是一个简单的 Celery 使用示例:

 1. 安装 Celery
bash
pip install celery


 2. 创建 Celery 应用
python
 tasks.py
from celery import Celery

 创建 Celery 实例
app = Celery('tasks', broker='redis://localhost:6379/0', backend='redis://localhost:6379/1')

 定义任务
@app.task
def add(x, y):
    return x + y


 3. 启动 Worker
bash
celery A tasks worker loglevel=info


 4. 调用任务
python
 调用异步任务
result = add.delay(4, 6)

 获取任务结果
print(result.get())




 Celery 与 Flask 集成

在 Flask 中,可以使用 FlaskCeleryExt 或直接集成 Celery。例如:

python
from flask import Flask
from celery import Celery

def create_app():
    app = Flask(__name__)
    app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
    app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/1'

    celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
    app.extensions["celery"] = celery

    return app

app = create_app()
celery = app.extensions["celery"]

@celery.task
def my_task():
    return "Task executed!"

Celery 是一个强大的异步任务队列工具,适用于处理耗时任务、定时任务和分布式计算。它的核心组件包括任务、消息队列、Worker 和后端。通过与 Flask 等 Web 框架集成,可以轻松实现异步任务处理,提升应用程序的性能和用户体验。


http://www.kler.cn/a/459365.html

相关文章:

  • 【Go学习】-01-2-常见类型及关键字
  • 【RTD MCAL 篇3】 K312 MCU时钟系统配置
  • Tableau数据可视化与仪表盘搭建-安装教程
  • python3GUI--智慧交通监控与管理系统 By:PyQt5
  • mysql 忘记root密码 无密码登录系统 配置文件怎么改?
  • golang 编程规范 - 项目目录结构
  • 物联网如何改变我们的生活:从智能家居到智慧城市
  • IEDA 使用auto Dev编码助手配置Deep Seek V3
  • Conmi的正确答案——JAVA获取远程HTTP客户端访问的IP
  • HarmonyOS Next 应用元服务开发-应用接续动态配置迁移保持迁移连续性
  • 使用 ThinkPHP 实现用户认证系统的详细教程
  • 【2024年-9月-21日-开源社区openEuler实践记录】PilotGo:简化运维管理的开源利器
  • 作业:day2
  • 畅游 Linux 开发天地:yum 与 vim 详解
  • wangEditor/editor自定义粘贴后续
  • Flink窗口window详解(分类、生命周期、窗口分配器、窗口函数、触发器)
  • Flume的概念和原理
  • 【大语言模型】DeepSeek与Kimi对论文内容理解的简单对比
  • 北京人形机器人产业发展与CES Asia 2025的科技展望
  • gozero项目接入elk的配置与实战
  • 如何绘制星巴克门店热力地图
  • 胡闹厨房练习(三)
  • UE5材质节点SimpleGrassWind
  • 《艺术的启示》最新答案2024
  • 前端(Ajax)
  • 日本东京阿里云200M不限流量轻量云主机测试报告