type
status
date
slug
summary
tags
category
icon
password
1. Celery介绍
Celery 是一个用 Python 编写的分布式任务队列框架,旨在实现异步任务处理、定时任务调度以及大规模并行计算等功能。它适用于构建高性能、高可靠性的应用程序,尤其在处理耗时任务、避免阻塞主流程、解耦复杂系统组件等方面表现出色。以下是 Celery 的详细介绍:
1.1 Celery 是什么?
1.2 核心概念与架构
1. Broker (消息中间件)
Celery 不直接提供消息传递服务,而是通过与第三方消息中间件(如 RabbitMQ、Redis、Amazon SQS 等)集成来实现任务的发布、分发和跟踪。Broker 负责存储待处理任务的消息,并确保其可靠地传递给工作进程。
2.Worker (任务执行单元)
Worker 是 Celery 应用程序的核心组成部分,它们监听 Broker 中的任务消息,取出任务进行执行。每个 Worker 可以是一个独立的进程或线程,可以在本地或远程机器上运行。Worker 进程可以根据需要扩展到多台服务器,以实现任务处理能力的水平扩展。
3.Task (任务)
用户定义的 Python 函数被 @app.task 装饰器装饰后,就成为 Celery 可识别的任务。这些任务可以接受参数、抛出异常、返回结果,并且支持自定义状态和元数据。任务可以被立即发送到 Broker,也可以按照指定的时间或条件触发
4. Backend (任务结果存储)
Celery 支持将任务执行结果存储在不同的后端系统中(如 Redis、数据库、Memcached 等),以便任务发起者或者其他组件查询任务状态和检索结果。结果存储可选,对于不需要保留结果的任务,可以配置为不启用
1.3 主要特性
- 1. 异步执行: Celery 允许将耗时操作异步化,即任务提交后,调用者无需等待结果立即返回,可以继续执行其他逻辑,从而提高系统响应速度和吞吐量。
- 2. 定时任务: 支持按照固定时间间隔、特定时间点或复杂的cron表达式调度任务执行。
- 3. 任务分发与并行处理: 多个 Worker 可以并发处理来自 Broker 的任务,实现任务的高效并行执行和负载均衡。
- 4. 任务状态追踪: 提供丰富的API和管理工具来监控任务状态,包括任务的创建、开始、成功、失败、重试等生命周期事件。
- 5. 任务结果持久化与回调: 支持任务结果的持久化存储,允许任务完成后触发回调函数,或者通过异步方式获取结果。
- 6. 错误处理与重试机制: 内建了任务重试策略,对于执行失败的任务,可以自动或手动触发重试,确保任务最终能够成功完成。
- 7. 集群与分布式部署: 易于在多台服务器上部署 Worker 集群,支持跨网络环境的分布式任务处理。
- 8. 丰富的插件与扩展: 社区提供了众多插件和扩展,以满足特定场景需求,如监控、性能统计、任务流控制、任务编排等。
1.2 celery 使用场景
- 1. 异步处理: 对于长时间运行的IO密集型或CPU密集型操作,如文件上传、数据处理、大规模计算等,避免阻塞主线程或影响用户体验。
- 2. 定时任务: 定时发送邮件、清理缓存、更新统计数据、执行定期备份等。
- 3. 分布式系统: 在分布式环境中协调任务执行,实现跨节点的任务分发、结果收集和故障恢复。
- 4. 高并发场景: 当系统面临大量并发请求时,将耗时操作异步化,提高系统的整体处理能力和响应速度。
总之,Celery 作为一款成熟的异步任务处理框架,以其强大的功能、灵活的配置和良好的社区支持,广泛应用于各种需要异步处理、任务调度及分布式计算的 Python 应用程序中。通过合理利用 Celery,开发者能够有效地提升应用性能、优化资源利用率,并构建出高度可伸缩、高可用的服务架构
1.3 Celery官网
1.4 Celery架构
2 Celery 快速使用
2.1 安装

2.2 快速使用
celery_demo.py--主文件
add_task.py--提交异步任务
通过resp查看任务

开启worker
get_result.py-查看结果
3 包结构
3.1 目录结构
celery.py
tasks.py
4 执行异步--延迟--定时任务
4.1 异步任务
4.2 延迟任务
4.3 定时任务
- Author:dittoyang
- URL:https://blog.yangziyang.top/article/6fdac58b-eb37-498f-a41d-cf594c733dd0
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!