Python-Celery-基础用法总结-安装-配置-启动


Celery 是一个基于分布式消息传递的异步任务队列。它专注于实时操作,但也支持调度。Celery 可以与 Django, Flask, Pyramid 等 Web 框架集成,但也可以独立使用。

1.安装 Celery

首先需要安装 Celery 和一个消息代理(如 RabbitMQ 或 Redis)。这里以 Redis 为例:

pip install celery[redis]

2.配置 Celery

创建一个 celery.py 文件来配置 Celery 应用程序:

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def add(x, y):
    return x + y
  • broker 参数指定了消息代理的 URL。
  • add 是一个简单的任务函数,它接受两个参数并返回它们的和。

3.启动 Worker

在命令行中启动一个 Celery worker,这将监听任务请求:

celery -A tasks worker --loglevel=info
  • -A 参数指定了包含 Celery 实例的模块。
  • worker 命令启动了一个工作进程。
  • --loglevel=info 设置了日志级别。

4.调用任务

可以在其他 Python 脚本中调用任务:

from tasks import add

result = add.delay(4, 4)
print(result.get())  # 输出: 8
  • delay() 方法异步执行任务。
  • get() 方法阻塞等待直到任务完成,并返回结果。

5.任务装饰器选项

可以为任务设置各种选项,例如重试策略、超时等:

@app.task(bind=True, max_retries=3)
def retry_task(self, x, y):
    try:
        return x / y
    except ZeroDivisionError as exc:
        raise self.retry(exc=exc, countdown=5)  # 5秒后重试
  • bind=True 让任务函数接收 self 参数,即任务本身的实例。
  • max_retries 设置最大重试次数。
  • retry() 方法用于手动重试任务。

6.任务状态

可以跟踪任务的状态和结果:

result = add.delay(10, 20)
print(result.ready())  # 返回任务是否已完成
print(result.successful())  # 返回任务是否成功完成
print(result.result)  # 返回任务的结果

7.定期任务

可以通过 Celery Beat 来调度定期任务。首先需要定义定期任务:

from celery.schedules import crontab

app.conf.beat_schedule = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': 30.0,
        'args': (16, 16)
    },
}

然后启动 Celery Beat 服务:

celery -A tasks beat --loglevel=info

8.高级特性

  • 链式任务:可以将多个任务链接起来,前一个任务的输出作为下一个任务的输入。
  • 组任务:同时执行多个任务,等待所有任务完成后收集结果。
  • 子任务:可以将任务嵌套到其他任务中。
  • 路由:可以将不同类型的任务发送到不同的队列。

9.监控和管理

  • Flower:是一个实时的 Celery Web 监控工具,可以查看任务状态、工作节点信息等。
  • 事件:Celery 支持事件处理,可以自定义事件处理器来响应特定的事件。

以上是使用 Celery 的基本指南。根据实际需求,可能还需要进一步探索 Celery 的高级特性和配置选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值