celery二

# 多worker,多队列实例
# demo.py
from celery import Celery

app = Celery()
app.config_from_object("celeryconfig")

@app.task
def taskA(x,y):
    return x + y

@app.task
def taskB(x,y,z):
    return x + y + z

@app.task
def add(x,y):
    return x + y


# celeryconfig.py
from kombu import Exchange,Queue

BROKER_URL = "redis://192.168.48.131:6379/1"
CELERY_RESULT_BACKEND = "redis://192.168.48.131:6379/2"

CELERY_QUEUES = (
    Queue("default",Exchange("default"),routing_key="default"),
    Queue("for_task_A",Exchange("for_task_A"),routing_key="for_task_A"),
    Queue("for_task_B",Exchange("for_task_B"),routing_key="for_task_B")
)
CELERY_ROUTES = {
    'demo.taskA':{"queue":"for_task_A","routing_key":"for_task_A"},
    'demo.taskB':{"queue":"for_task_B","routing_key":"for_task_B"}
}

# 启动一个worker来指定taskA
# celery -A demo worker -l info -n workerA.%h -Q for_task_A
# celery -A demo worker -l info -n workerB.%h -Q for_task_B
# celery -A demo worker -l info -n workerB.%h -Q celery

# 在客户端进行调用
from tasks import *
re1 = taskA.delay(100, 200)
print(re1.result)
re2 = taskB.delay(1, 2, 3)
print(re2.result)
re3 = add.delay(2, 3)
print(re3.status)
### 关于 Celery 的概述 Celery 是一种用于处理分布式任务队列的工具,能够高效管理大量任务并支持实时处理以及计划任务的功能[^1]。通过 Celery,开发者可以轻松实现异步任务调度和后台作业处理。 以下是关于如何安装、配置以及运行 Celery 的详细说明: --- #### 安装与环境准备 为了正确使用 Celery,首先需要确保 Python 虚拟环境已激活。如果遇到 `pip install` 后无法正常工作的情况,可能是因为未激活虚拟环境所致[^3]。因此,在安装之前,请先确认虚拟环境的状态,并按照如下方式操作: ```bash source /path/to/virtualenv/bin/activate pip install celery ``` --- #### 运行 Celery Worker 和 Beat 启动 Celery 工作节点时,通常会指定应用名称 (`-A`) 并设置日志级别 (`-l`) 等参数。例如以下命令展示了如何以特定主机名启动一个 Celery worker 实例[^2]: ```bash /usr/bin/python3.6 -m celery worker -A CeleryPro -l info \ --logfile=w2%I.log --pidfile=w2.pid --hostname=w2@Python3 ``` 此外,还可以配合其他组件一起部署完整的 Celery 生态系统,比如周期性任务调度器 (Beat) 及监控工具 (Flower): ```bash # 启动 Celery Beat celery -A your_project_name beat --loglevel=info # 启动 Flower 监控服务 celery -A your_project_name flower ``` --- #### 创建带进度跟踪的任务 当需要从前端展示后端任务执行进展时,可通过更新任务状态的方式实现动态反馈功能[^4]。下面是一个简单的例子演示了这一过程: ```python from celery import Celery import time import random app = Celery('tasks', broker='pyamqp://guest@localhost//') @app.task(bind=True) def long_task(self): """模拟长时间运行的任务""" verbs = ["Starting", "Booting", "Fixing"] adjectives = ["quick", "lazy", "smart"] nouns = ["cat", "dog", "fox"] total_steps = random.randint(5, 15) for step in range(total_steps): if not message or random.random() < 0.2: message = f"{random.choice(verbs)} {random.choice(adjectives)} {random.choice(nouns)}" self.update_state( state="PROGRESS", meta={"current": step, "total": total_steps, "status": message} ) time.sleep(1) return {"current": 100, "total": 100, "status": "Complete!", "result": True} ``` 调用此函数后可以从返回的结果对象中读取当前完成百分比以及其他附加信息。 --- ### 注意事项 在实际开发过程中需要注意几点常见问题及其解决方案: - **Broker连接失败**: 检查 RabbitMQ 或 Redis 是否正在运行。 - **Worker进程崩溃**: 查看对应worker的日志文件定位错误原因。 - **定时任务不触发**: 确认beat的服务已经开启并且配置无误。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值