📚 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