# celery_quickstart **Repository Path**: taikun928/celery_quickstart ## Basic Information - **Project Name**: celery_quickstart - **Description**: 快速上手的 Celery + Redis Demo 项目 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-10 - **Last Updated**: 2026-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Celery + Redis Quickstart Demo 这个仓库演示了 **Celery + Redis** 的最小用例 (快速上手使用) : 1. `celery_app.py` 创建 Celery 实例并读取 `.env` 中的 Redis 连接; 2. `tasks.py` 定义了几个简单任务(加法、字符串反转、随机数、慢速任务、JSON 处理); 3. `producer.py` 调 `tmp_utils.generate_thousand_json_records()` 一次性生成并推送 1000 条 JSON; 4. `tmp_utils.py` 负责造数,方便演示批量任务。 ``` celery_quickstart/ ├── celery_app.py # Celery 配置 ├── tasks.py # demo 任务 ├── producer.py # 触发任务(只推送,不等待结果) └── tmp_utils.py # 生成 1000 条 JSON 示例数据 ``` ## 1. 准备环境 ```bash python -m venv .venv .venv\Scripts\activate # Windows # source .venv/bin/activate # macOS/Linux pip install -U pip celery redis python-dotenv ``` ### 配置 Redis 在项目根目录创建 `.env`(或复制 `.env.example`),写入: ``` REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_DB=0 # 如有密码就填,没有可以留空 REDIS_PASSWORD= ``` 本地没有 Redis 的话可用 Docker 快速起一个: ```bash docker run -d -p 6379:6379 --name redis-demo redis:7 ``` ## 2. 启动 Celery worker Windows 需使用 solo pool: ```bash celery -A celery_app:app worker -l info --pool=solo ``` 类 Unix 环境可去掉 `--pool=solo`。 ## 3. 发送 demo 任务 执行一次 `producer.py` 会生成 1000 条 JSON,并逐条调用 `process_market_record.delay(record)`: ```bash python producer.py ``` 示例输出: ``` 开始生成 1000 条 JSON 数据并提交 Celery 任务(不等待结果)... 已提交 100 / 1000 条记录... ... 已提交 1000 / 1000 条记录... 全部任务已提交!示例 task_id: - 76f45d7d-... - 184a9f6c-... - ... ``` 后台 worker 会不断打印 `demo.process_market_record` 的日志,可观察异步消费效果;若想验证某条任务,可在 Python shell 里用 `AsyncResult('task_id').get()`。 ## 4. 自己动手扩展 - 在 `tasks.py` 新增函数即可自动注册成 Celery 任务,也可改写现有任务逻辑。 - `tmp_utils.generate_thousand_json_records()` 只是造数示例,可替换成你的业务数据源。 - 如果希望生产者接受用户输入,可在 `producer.py` 中增加 CLI 参数,然后调用对应任务的 `.delay()`。 - 生产环境建议把结果存储(backend)与 broker 分离,但 demo 中复用同一 Redis 连接即可。