数据库—04基于Celery、Redis和Flower的异步邮件报警与监控

项目案例:基于Celery、Redis和Flower的异步邮件报警与监控

一、项目背景

异步任务队列的主要应用场景在:

  • 无须实现响应,性能占用较大,任务处理时间较长的任务,如占用网络性能的发送邮件,占用IO 性能的视频处理。 和经常我们在注册信息的时候,发送激活邮箱,手机发送验证码
  • 按时发布的定时任务,如定期对服务器的检查,对当天网站的监测分析。

补充
(1) 同步和异步的概念:
同步:你去饭店吃饭,点了餐付了钱,一直站着等待饭菜做好你拿到手然后坐下来吃
异步:你去饭店吃饭,点了餐付了钱,拿到一个号码牌等待饭菜做好,期间你可以去干其他事情,等叫号的时候去拿饭。

Celery组件简介
Celery(芹菜)是一个Python编写的异步任务队列/基于分布式消息传递的作业队列。用于处理数以百万计的任务。
三大组件: 消息中间件(Broker),任务执行单元(Worker)和任务执行结果存储 (Backend)
在这里插入图片描述
Celery支持RabbitMQ、Redis、ZoopKeeper等作为Broker,而对这些消息队列的抽象,都是通过 Kombu实现的。

Flower是基于web的监控和管理Celery的实时监控工具。

Redis(Remote Dictionary Server)远程字典数据服务的缩写,由意大利人开发的是一款内存高速缓存数 据库。可以作为消息队列,队列可以让不同的主机来访问。

二、安装项目所需软件

pip install celery
pip install flower

太慢使用豆瓣源

pip install -i https://pypi.douban.com/simple celery
pip install -i https://pypi.douban.com/simple flower

三、项目实现

1、项目结构

在这里插入图片描述

  • config文件:项目的一些配置信息
  • main文件:主程序,启动异步任务
  • tasks文件:要执行的异步任务

2、项目程序

(1)主程序main.py

"""  主程序代码  """

from celery import Celery

# include指定任务存储文件位置
app = Celery('app', include=['tasks'])
# 加载配置文件
app.config_from_object('config')

if __name__ == '__main__':
    # 启动异步任务
    app.run()

(2)任务程序tasks.py

这里只是简单模拟了一些任务,项目中要实现的异步发送邮件完整代码在后面详细给出

"""  异步要执行的任务程序:发送邮件、发送短信  """
import time
from main import app

@app.task
def send_email(mail):
    """模拟发送邮件"""
    print('sending mail to %s....' %(mail['to']))
    time.sleep(2)
    print('mail end')
    return 'send mail successful'

@app.task
def add(x, y):
    """模拟计算函数"""
    time.sleep(0.5)
    return x + y

(3)配置文件config.py

"""  项目的配置文件,存储配置信息  """

from datetime import timedelta
# 使用redis作为消息代理
BROKER_URL = 'redis://127.0.0.1:6379/2'
# 将任务执行结果存入redis , 也可以是mysql
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/3'
# 任务序列化和反序列化格式为msgpack(类似json格式) #celery在执行时任务传输的格式
CELERY_TASK_SERIALIZER = 'msgpack'
# 任务结果序列化存储格式为JSON(可读性好)
CELERY_RESULT_SERIALIZER = 'json'
# 任务过期时间
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24
# 任务需要接收的内容
CELERY_ACCEPT_CONTENT = ['json', 'msgpack']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值