Python:Celery+Redis+Flower安装和使用

简介:Celery是一个Python开源的分布式任务队列,可以用于异步处理、任务调度等场景。在Python应用开发中被广泛使用。Celery通过提供丰富的API和灵活的配置选项,可以很方便地与其他框架和库整合,如Django、Flask等。Celery可以让开发者专注业务逻辑的实现,而不必过多关心任务的执行和调度细节。利用这个可以带来应用解耦、异步提速、削峰填谷 三大功效。

工作原理:Celery 通过消息机制进行通信,通常使用中间人(Broker)作为客户端和职程(Worker)调节。启动一个任务,客户端向消息队列发送一条消息,然后中间人(Broker)将消息传递给一个职程(Worker),最后由职程(Worker)进行执行中间人(Broker)分配的任务。Celery 可以有多个职程(Worker)和中间人(Broker),用来提高Celery的高可用性以及横向扩展能力。Flower是基于web的监控和管理Celery的工具,和任务队列是隔离的,flower的运行并不会影响到任务队列的真正执行。flower作为celery后台任务的管理工具,将各个任务的执行情况、各个worker的健康状态进行实时监控并以可视化的方式展现。

Python:Celery+Redis+Flower安装和使用_第1张图片

历史攻略:

win10:安装docker和测试安装redis

centos7:docker安装Redis并用Redis Desktop Manager连接

消息队列对比:Redis、Kafka 和 Pulsar

Python高阶:counter、orderedDict、defaultdict、deque、queue简单示例

项目目录结构:

.
├── main.py
├── tasks.py
└── requirements.txt

main.py:

# -*- coding: utf-8 -*-
# time: 2023/4/6 21:52
# file: main.py
# 公众号: 玩转测试开发
from tasks import add, subtract, multiply, divide

result = list()
loop = 5
for i in range(loop):
    result.append(add.delay(8, 2).get())
    result.append(subtract.delay(8, 2).get())
    result.append(multiply.delay(8, 2).get())
    result.append(divide.delay(8, 2).get())

print(f"result:{result}")

tasks.py:

# -*- coding: utf-8 -*-
# time: 2023/4/6 21:45
# file: tasks.py
# 公众号: 玩转测试开发
from celery import Celery

# 连接远程 redis服务的地址和端口号
redis_host = '远程服务器ip'
redis_port = '6379'

app = Celery('tasks', broker=f'redis://{redis_host}:{redis_port}/0', backend=f'redis://{redis_host}:{redis_port}/1')


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


@app.task
def subtract(x, y):
    return x - y


@app.task
def multiply(x, y):
    return x * y


@app.task
def divide(x, y):
    return x / y

requirements.txt:

eventlet
celery===5.2.7
flower
redis

安装:

pip install -r requirements.txt

创建和运行redis:

docker run -itd --name redis-test -p 6379:6379 redis

win下操作步骤:

进入项目目录,运行

celery -A tasks worker --loglevel=info  -P eventlet

启动celery监控和管理Flower:

celery -A tasks flower --address=127.0.0.1 --port=5555

执行测试:

python main.py

运行结果:

Python:Celery+Redis+Flower安装和使用_第2张图片

Flower的监控状况:

Python:Celery+Redis+Flower安装和使用_第3张图片

Python:Celery+Redis+Flower安装和使用_第4张图片

注意事项:

在win10下启动celery时,最好带上参数 -P eventlet 否则可能数据会无法正常解析

你可能感兴趣的:(python,redis,开发语言)