当前位置: 首页 > ds >正文

2 celery环境搭建

1. 安装 Celery 及依赖

1.1 安装 Celery

使用 pip 安装 Celery(推荐 Python 3.7+ 环境):

pip install celery

1.2 选择并安装 Broker

Celery 需要一个消息中间件(Broker)来传递任务。以下是两种常用 Broker 的安装方式:

选项一:Redis

Redis 轻量且适合快速上手,安装步骤如下:

# 安装 Redis 服务(Ubuntu/Debian)
sudo apt-get install redis-server# 启动 Redis
sudo systemctl start redis# 安装 Python 的 Redis 客户端库
pip install redis
选项二:RabbitMQ

RabbitMQ 是 Celery 官方推荐的 Broker,适合生产环境:

# 安装 RabbitMQ(Ubuntu/Debian)
sudo apt-get install -y erlang
sudo apt-get install rabbitmq-server# 启动 RabbitMQ
sudo systemctl start rabbitmq-server# 可选:启用 Web 管理界面
sudo rabbitmq-plugins enable rabbitmq_management

提示:生产环境推荐使用 RabbitMQ,开发环境可用 Redis 快速测试。


2. 最小化示例:编写第一个异步任务

2.1 创建 Celery 应用

新建文件 tasks.py,编写以下代码:

from celery import Celery# 创建 Celery 实例,指定 Broker 和 Backend
app = Celery('tasks',broker='redis://localhost:6379/0',  # 使用 Redis 作为 Brokerbackend='redis://localhost:6379/0'   # 使用 Redis 存储结果
)# 定义一个异步任务
@app.task
def add(x, y):return x + y

2.2 调用异步任务

在同一目录下打开 Python Shell,测试任务:

from tasks import add# 异步调用任务(立即返回 AsyncResult 对象)
result = add.delay(4, 6)# 查看任务是否完成(非阻塞)
print(result.ready())  # 输出 False(任务未完成)# 获取任务结果(阻塞等待)
print(result.get(timeout=10))  # 输出 10

3. 命令行工具:启动 Worker 与查看状态

3.1 启动 Worker 节点

在项目目录下执行以下命令启动 Worker:

celery -A tasks worker --loglevel=info
  • -A tasks:指定 Celery 应用模块(tasks.py 中的 app)。
  • --loglevel=info:设置日志级别为详细信息。

输出示例

[config]
.> app:         tasks:0x7f8d1c3b3d90
.> transport:   redis://localhost:6379/0
.> results:     redis://localhost:6379/0
.> concurrency: 4 (prefork)
[queues]
.> celery           exchange=celery(direct) key=celery

3.2 查看 Worker 状态

使用 celery inspect 命令检查 Worker 是否存活:

celery -A tasks inspect ping

正常响应示例:

-> celery@ubuntu: OKpong

3.3 监控任务结果(可选)

如果配置了 backend(如 Redis),可通过以下命令查看任务结果:

# 进入 Redis CLI
redis-cli# 查看结果(假设任务 ID 为 7a9d8c3a-...)
127.0.0.1:6379> GET celery-task-meta-7a9d8c3a...
"{\"status\": \"SUCCESS\", \"result\": 10, ...}"

4. 常见问题与解决

4.1 Broker 连接失败

  • 现象:Worker 启动时报错 ConnectionRefusedError
  • 解决
    1. 确认 Broker 服务已启动(如 systemctl status redis)。
    2. 检查防火墙是否开放 Broker 端口(默认 Redis: 6379,RabbitMQ: 5672)。
    3. 验证连接 URL 格式(如 redis://:password@host:port/db)。

4.2 任务未执行

  • 现象:任务长时间处于 PENDING 状态。
  • 解决
    1. 确认 Worker 已启动且未卡死。
    2. 检查任务是否被正确路由到队列(默认队列为 celery)。

5. 环境验证

通过浏览器访问 RabbitMQ 管理界面(默认地址 http://localhost:15672,用户名/密码为 guest/guest)或 Redis CLI,确认消息正常流转。

http://www.xdnf.cn/news/275.html

相关文章:

  • 从实验室到肌肤:解码抗衰老科学革命与Dr.Jin麦角硫因胶囊的抗氧化突围
  • 香港服务器CPU对比:Intel E3与E5系列核心区别与使用场景
  • Aladdin显卡多任务运行教程
  • TVM计算图分割--Collage
  • 红黑树insert笔记
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(六级)真题
  • 使用Service发布应用程序
  • std::set (C++)
  • #手动控制windows更新时间(非常安全,可随时恢复)
  • C++ 网络层接口设计与实现:基于 Socket 编程
  • L2-018 多项式A除以B
  • SQL-exists和in核心区别​、 性能对比​、适用场景​
  • 2.1 数据处理
  • 【 解决Cline插件无法激活及DeepSeek模型请求卡顿或者无法加载问题】
  • CMake使用教程
  • IO流(二)
  • 从 Transformer 到文本生成 (From Transformer to Text Generation)
  • STM32---GPIO
  • Linux——进程通信
  • Spring MVC 初体验~~
  • 自定义 el-menu
  • 【jenkins】首次配置jenkins
  • 合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全
  • 代码学习总结(五)
  • cmake 语法大纲
  • 研究生面试常见问题
  • 1.Linux基础指令
  • 卷积神经网络(CNN)与VGG16在图像识别中的实验设计与思路
  • docker镜像被覆盖了怎么办?通过sha256重新上传镜像
  • VueRouter笔记