📚 Celery 异步任务与定时任务配置文档
Celery 是 Python 中广泛使用的异步任务队列/作业队列,基于分布式消息传递。本文档用于快速入门 Celery
的使用,涵盖异步任务与定时任务(周期任务)的基本启动方式和参数说明。
🔧 关键组件说明
- Worker(工作者):执行任务的进程,处理消息队列中的具体任务。
- Beat(调度器):处理周期性任务调度,如定时发送邮件、每小时更新缓存等。
⚙️ 常用参数配置选项说明
🧩 基础启动参数
参数 | 说明 |
---|---|
-A <module> |
指定 Celery 应用入口模块名,必须指定;通常是包含 Celery 对象实例的模块(如 celery_tasks) |
-c <n> |
设置 worker 并发执行的最大任务数,适用于多核 CPU,例:-c 4 表示同时运行 4 个工作线程 |
-l <level> |
设置日志级别(debug / info / warning / error / critical) |
-P <pool> |
指定执行池模块类型,见下方说明 |
-Q <name> |
指定要监听的队列名称,如 -Q dev-celery |
🧪 执行池类型支持(-P)
执行池类型 | 描述说明 |
---|---|
prefork |
默认,使用多进程模式,性能强,适合 CPU 密集型任务 |
eventlet |
基于协程的高并发库,适合 IO 密集型或网络型任务(需安装包) |
gevent |
基于协程的另一实现,适合 IO 密集型任务(需安装) |
solo |
单进程串行模式,仅推荐用于调试 |
🚀 启动方式示例
▶️ 启动 Worker 工作进程
适用场景:执行异步任务(如发送通知、写日志、延迟任务处理等)
celery -A celery_tasks worker -l info
如使用协程执行池(推荐在 Windows 或 IO 密集任务中):
celery -A celery_tasks worker -l info -P eventlet
安装依赖:
pip install eventlet
⏰ 启动 Beat 调度器(周期任务)
适用场景:定时任务调度,例如每 5 分钟执行一次某函数
celery -A celery_tasks beat -l info
🧩 同时运行 Worker + Beat(适用于简化部署)
说明:使用 --beat
参数直接在同一进程中启动 worker 和 beat
celery -A celery_tasks worker --beat -l info
💡 不建议在生产环境中同时运行 Worker 和 Beat,推荐分别部署
⚠️ 注意事项
- ❗ Windows 用户默认不兼容 prefork 执行池。建议改用:
pip install eventlet
celery -A celery_tasks worker -P eventlet -l info
- ❗ 在指定队列消费时,如任务通过 @app.task"">`@app.task(queue=’X’)` 指定了队列,请务必在启动时监听对应队列:
celery -A celery_tasks worker -Q X -l info
📂 示例项目结构推荐
project/
├── celery_tasks/
│ ├── __init__.py <- 定义 Celery app 实例
│ ├── config.py <- Celery 配置(如 broker_url / timezone)
│ ├── tasks/ <- 存放异步任务模块
│ │ └── task_x.py
├── run_worker.sh <- 脚本启动 Celery worker
├── run_beat.sh <- 脚本启动 celery beat
作者:freed 创建时间:2025-03-28 15:02
最后编辑:freed 更新时间:2025-03-28 15:08
最后编辑:freed 更新时间:2025-03-28 15:08