SuperAPI AI 工具集

celery

部署与运维

查看项目

更新于 10-15 12:25

技能介绍

Celery 是一个面向 Python 的分布式任务队列系统,用于在多个 worker 之间异步执行后台任务。它支持任务调度、重试、任务工作流,并能与 Django、Flask、FastAPI 等框架集成。

用途 Celery 主要用于将耗时的操作从主流程中剥离,交给后台 worker 异步执行。典型用途包括:后台处理(邮件发送、文件处理、报表生成)、定时任务(类似 cron 的周期性作业,如清理、备份、数据同步)、分布式计算(跨多个 worker 或服务器处理任务)、异步工作流(链式、分组及复杂任务依赖编排)、实时处理(webhook、通知、数据管道)以及负载均衡(将 CPU 密集型工作分散到多个 worker)。

主要能力 Celery 的架构由 broker、worker、结果后端和 beat 调度器组成。broker 是存储任务的消息队列,支持 Redis、RabbitMQ、Amazon SQS 等;worker 是从 broker 拉取并执行任务的进程;结果后端用于存储任务结果,支持 Redis、数据库、S3、Cassandra、Elasticsearch 等;beat 调度器负责周期性任务,支持类似 cron 的调度和基于间隔的任务。任务状态包括 PENDING、STARTED、SUCCESS、FAILURE、RETRY、REVOKED。任务定义支持装饰器、shared_task 和 Task 类三种方式,并提供丰富的任务选项,如自定义名称、绑定实例、忽略结果、最大重试次数、重试延迟、速率限制、硬/软时间限制、序列化、压缩、优先级、目标队列、路由键、延迟确认等。任务执行支持 delay 和 apply_async,后者可控制倒计时、ETA、过期时间、队列、路由键、交换机、优先级、序列化、压缩、重试策略以及成功/错误回调。Celery 还提供 signature(签名)机制,支持部分参数、不可变签名、克隆修改。结果处理支持阻塞获取、非阻塞检查、状态查询、元数据读取、遗忘结果和撤销任务。任务路由支持队列定义、路由规则、基于函数的路由、worker 队列绑定和优先级队列。周期性任务通过 beat_schedule 配置,支持 crontab 和 solar 调度,也可结合 django-celery-beat 实现数据库动态调度。工作流(Canvas)提供 chain(顺序执行)、group(并行执行)、chord(分组加回调)、map 和 starmap 等编排原语。

使用方式 安装可通过 pip install celery,并按需安装 broker 扩展,如 pip install celery[redis]、pip install celery[amqp],或安装完整依赖 pip install celery[redis,msgpack,auth,cassandra,elasticsearch,s3,sqs]。基本使用需创建 Celery 应用并配置 broker 与 backend,定义任务后启动 worker:celery -A celery_app worker --loglevel=info,可通过 --concurrency 设置并发,通过 -Q 指定队列。执行任务使用 add.delay(4, 6) 或 apply_async。启动 beat 调度器使用 celery -A myapp beat --loglevel=info。

适用场景 适合需要异步执行后台作业、定时调度、分布式处理、复杂任务依赖编排、实时数据管道和负载均衡的 Python 项目,尤其是已使用 Django、Flask 或 FastAPI 的应用。

限制 资料明确指出,简单异步 I/O 应使用 asyncio;实时请求/响应应使用异步 Web 框架;需要亚秒级延迟应使用内存队列;基础设施极简时应考虑 RQ 或 Huey 等更简单的替代方案。