zoukankan      html  css  js  c++  java
  • Flask实战第67天:Flask+Celery实现邮件和短信异步发送

    之前在项目中我们发送邮件和 短信都是阻塞的,现在我们来利用Celery来优化它们

    官方使用文档: http://flask.pocoo.org/docs/1.0/patterns/celery/

    redis服务器及插件,还有cerely在上节我们已经安装好,这里就不重复过程了。

    首先,来完成邮件

    在项目下新建tasks.py

    from flask import Flask
    import config
    from celery import Celery
    from flask_mail import Message
    from exts import mail
    
    ##这里没有直接使用from bbs import app,是因为会出现循环引用的问题 
    app = Flask(__name__)
    app.config.from_object(config)
    mail.init_app(app)
    
    
    #在配置文件需要配置CELERY_RESULT_BACKEND、CELERY_BROKER_UR
    def make_celery(app):
        celery = Celery(app.import_name, backend=app.config['CELERY_RESULT_BACKEND'],
                        broker=app.config['CELERY_BROKER_URL'])
        celery.conf.update(app.config)
        TaskBase = celery.Task
        class ContextTask(TaskBase):
            abstract = True
            def __call__(self, *args, **kwargs):
                with app.app_context():
                    return TaskBase.__call__(self, *args, **kwargs)
        celery.Task = ContextTask
        return celery
    
    celery = make_celery(app)
    
    
    @celery.task
    def send_mail(subject,recipients,body):
        message = Message(subject=subject,recipients=recipients,body=body)
        mail.send(message)

    编辑config.py

    # Celery相关配置
    CELERY_RESULT_BACKEND = "redis://10.2.2.120:6379/0"
    CELERY_BROKER_URL = "redis://10.2.2.120:6379/0"

    编辑cms.views.py发送邮件的部分

    在项目目录下启动worker

    celery -A tasks.celery --pool=eventlet worker --loglevel=info

    启动项目,测试修改邮箱成功!

    完成短信优化

    编辑tasks.py

    ..
    from utils.aliyunsms.send_sms import send_sms
    
    @celery.task
    def send_mail(subject,recipients,body):
        message = Message(subject=subject,recipients=recipients,body=body)
        mail.send(message)

    编辑common.virews.py

    重启下worker

    注册页测试手机获取验证码

  • 相关阅读:
    SurfaceView 和 View 区别
    投资学第一章 investments-introduction
    HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
    多个Activity之间的切换与数据交互
    HDU 4715 Difference Between Primes (打表)
    org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the CDATA sectio
    用纯jsp实现用户的登录、注册与退出
    Java单态模式
    植物-蔬菜:刺儿菜
    汉语-词语:生活
  • 原文地址:https://www.cnblogs.com/sellsa/p/9757905.html
Copyright © 2011-2022 走看看