笔记-python之celery使用详解

Celery是一个用于处理异步任务的Python库,它允许你将任务分发到多个worker进行处理。以下是Celery的使用详解:

  1. 安装Celery
    使用pip安装Celery:
pip install celery
  1. 创建Celery实例
    首先,需要创建一个Celery实例,指定broker(消息中间件)和backend(结果存储)。
from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//', backend='rpc://')
  1. 定义任务
    在模块中定义一个任务,使用@app.task装饰器将其标记为Celery任务。
@app.task
def add(x, y):
    return x + y
  1. 调用任务
    可以使用apply_asyncdelay方法调用任务。
# 使用apply_async调用任务
add.apply_async(args=(1, 2), queue='default')

# 使用delay调用任务
result = add.delay(1, 2)
  1. 运行worker
    在命令行中运行以下命令启动worker:
celery -A your_module worker --loglevel=info
  1. 查看任务状态
    可以使用AsyncResult对象查看任务的状态。
result = add.delay(1, 2)
print(result.ready())  # 检查任务是否完成
print(result.get())    # 获取任务结果
  1. 配置多个worker和队列
    可以在Celery实例中配置多个worker和队列。
app = Celery('tasks', broker='pyamqp://guest@localhost//', backend='rpc://')
app.conf.update(
    worker_directories=['path/to/worker1', 'path/to/worker2'],
    task_queues=[
        Queue('default', Exchange('default'), routing_key='default'),
        Queue('high-priority', Exchange('high-priority'), routing_key='high-priority'),
    ],
    task_default_queue='default',
    task_default_exchange='default',
    task_default_routing_key='default',
)
  1. 优先级和路由
    可以为任务设置优先级和路由键,以便将任务发送到不同的队列。
add.apply_async(args=(1, 2), priority=2, queue='high-priority', routing_key='high-priority')
  1. 结果后端
    可以使用结果后端存储任务的结果。支持多种后端,如Redis、数据库等。
app = Celery('tasks', broker='pyamqp://guest@localhost//', backend='redis://localhost:6379/0')
  1. 自定义序列化和压缩
    可以自定义序列化和压缩方法,以便在broker和worker之间传输数据。
app.conf.update(
    accept_content=['json'],
    result_serializer='json',
    task_serializer='json',
    compression='gzip',
)
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白砌墙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值