简单使用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()
执行生产者

消费者结果


被折叠的 条评论
为什么被折叠?



