简单使用Celery

简单使用Celery

⚠️ 请关注公众号“朋蛋”

1 介绍

Python异步耗时任务的框架有celery、RQ (Redis Queue)、 huey、Dramatiq、funboost等,其中比较成熟的是celery和RQ (Redis Queue)。

Celery 功能强大的“瑞士军刀”,是一个成熟、功能全面的分布式任务队列系统。它支持多种消息代理和后端,适合构建复杂、大规模的应用,以其灵活性和强大功能而闻名。

RQ轻量级的“精致小刀”,基于 Redis,上手极快,配置简单,非常适合中小型项目或快速开发。充分利用 Redis 的数据结构,实现了一个非常直观的任务队列。

celery

# 官网地址
https://docs.celeryq.dev/en/stable/index.html

# Github地址
https://github.com/celery/celery

RQ (Redis Queue)

# 官网地址
https://python-rq.org/

# Github地址
https://github.com/rq/rq/

安装celery

pip install "celery[librabbitmq,redis,auth,msgpack]"

docker创建Redis容器

docker run -d \
--name my-redis \
-p 6379:6379 \
-e REDIS_PASSWORD=123456 \
redis:6.2.2 redis-server --requirepass 123456

2 Python实现

2.1 消费任务

consumer_task.py

# consumer_task.py
from celery import Celery

# 创建 Celery 实例
app_cel = Celery(
    # 标识名称
    'myapp',
    # 消息代理
    broker='redis://:123456@192.168.108.147:6379/1',
    # 存储数据
    backend='redis://:123456@192.168.108.147:6379/2',
    # 启动线程
    worker_pool="solo"
)


# 执行耗时任务
@app_cel.task
def consumer_data(data: str):
    duration = 3
    print(f"任务开始,将持续 {duration} 秒")
    print(data)
    data_str = data + "-consumer"

    print("任务完成")
    return data_str

在终端中执行任务,consumer_task是文件名。

celery -A consumer_task worker -l INFO

2.2 生产者

producer_task.py

# producer_task.py
import time

from consumer_task import consumer_data


def producer_msg():
    # 发送消息
    for i in range(3):
        time.sleep(1)
        res = consumer_data.delay("data-"+ str(i))
        print(res.get())


if __name__ == '__main__':
    producer_msg()

执行生产者

消费者结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值