flask项目1实战:2.5 Celery介绍和使用待完善

在这里插入图片描述

(根据居然老师直播课内容整理)
  • celeny 可以脱离flask独立运行,为了保持项目一致性,本项目上还是将celeny定义在lghome下

二、项目实例

  • 本项目对发送短信利用生产者消费者开发模式,采用 celery

1、初步实现

1.1 定义任务

  • 安装celery包
  • 引入celery包的Celery 类:取名为home,数据存贮在redis中,为方便与其它数据区分,放在数据库1中
  • 创建celery_app对象
  • 定义短信发送任务
from celery import Celery 

celery_app=Celery("home",broken="redis://127.0.0.1:6379/1")

@celery_app.task
def send_sms(tid,mobile,datas):
    '''发送短信异步任务'''
    ccp=CCP()
    ccp.send_message(tid,mobile,datas)

1.2 调用celey

  • 原有的调用方式是同步发送,应注销掉,改调用celery
	# lghome/api_1_0/verify_code.py

    # # 发短信(同步发送)
    # try:
    #     ccp = CCP()
    #     result = ccp.send_message(1,mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES/60)))
    # except Exception as e:
    #     logging.error(e)
    #     return jsonify(errno=RET.THIRDERR, errmsg='发送异常')
    #
    # # 返回值
    # if result == 0:
    #     return jsonify(errno=RET.OK, errmsg='发送成功')
    # else:
    #     return jsonify(errno=RET.THIRDERR, errmsg='发送失败')

    # 发送短信(异步发送)
    send_sms.delay(1, mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)))

    return jsonify(errno=RET.OK, errmsg='发送成功')
  • 调用发送短信时,未进行异常捕获:

1.3 启动服务:启动任务处理者worker

  • 在命今行启动服务:

celery -A lghome.tasks.task_sms worker -l info

  • 在windwos下使用下面命令

celery -A lghome.tasks.task_sms worker -l info -P eventlet

  • 其中:
    • -A 指对应的应用程序, 其参数是项目中 Celery实例的位置。
    • worker指这里要启动的worker。
    • -l指日志等级,比如info等级。

      在这里插入图片描述

1.4 验证测试

在这里插入图片描述

2、celery目录分层

  • 上面利用celery 实现相关功能,但没有对目录分层,随着项目越来越大,应当进行目录分层,保持结构合理,功能规划合理
  • 在tasks包里建一个包sms用于发送短信(每一个功能一个包)
  • 包(sms)的任务必须叫 tasks.py (不能随便取名)
  • 在tasks包 里建一个入口文件main.py

2.1 定义任务

# lghome/tasks/sms/tasks.py 
from lghome.tasks.main import celery_app
from lghome.libs.ronglianyun.ccp_SMS import CCP


@celery_app.task
def send_sms(tid, mobile, datas):
    '''发送短信异步任务'''
    ccp = CCP()
    ccp.send_message(tid, mobile, datas)

2.2 定义入口文件

# lghome/tasks/main.py

from celery import Celery

# 创建celery对象
celery_app = Celery("home")

# 加载配置文件
celery_app.config_from_object("lghome.tasks.config")

# 注册任务
celery_app.autodiscover_tasks(["lghome.tasks.sms"])

2.3 配置文件

# lghome/tasks/config.py

# broker_url
BROKER_URL="redis://127.0.0.1:6379/1"
# 
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'

2.4 调用celey

    # from lghome.tasks.task_sms import send_sms
    from lghome.tasks.sms.tasks import send_sms
    send_sms.delay(1, mobile_code, (sms_code, int(constants.SMS_CODE_REDIS_EXPIRES / 60)))

    return jsonify(errno=RET.OK, errmsg='发送成功')

2.5 启动服务:启动任务处理者worker

  • 在命今行启动服务:

celery -A lghome.tasks.main worker -l info

  • 在windwos下使用下面命令

celery -A lghome.tasks.main worker -l info -P eventlet

在这里插入图片描述

2.6 验证测试

在这里插入图片描述

原文地址:https://blog.csdn.net/laoluobo76/article/details/110519866

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作者。他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
Fullcalendar日历使用,包括视图选择、事件插入、编辑事件、事件状态更改、事件添加和删除、事件拖动调整,自定义头部,加入el-popover显示图片、图片预览、添加附件链接等,支持手机显示。
监听QQ消息并不需要我们写代码,因为市面上已经有很多开源QQ机器人框架,在这里我们使用go-cqhttp官方文档:go-cqhttp如果您感兴趣的话,可以阅读一下官方文档,如果不想看,直接看我的文章即可。
【Flask框架】—— 视图和URL总结
python+web+flask轻量级框架的实战小项目。登录功能,后续功能可自行丰富。
有了这个就可以配置可信IP,关键是不需要企业认证,个人信息就可以做。
本专栏是对Flask官方文档中个人博客搭建进行的归纳总结,与官方文档结合事半功倍。 本人经验,学习一门语言或框架时,请首先阅读官方文档。学习完毕后,再看其他相关文章(如本系列文章),才是正确的学习道路。
本专栏是对Flask官方文档中个人博客搭建进行的归纳总结,与官方文档结合事半功倍。基础薄弱的同学请戳Flask官方文档教程 本人经验,学习一门语言或框架时,请首先阅读官方文档。学习完毕后,再看其他相关文章(如本系列文章),才是正确的学习道路。 如果python都完全不熟悉,一定不要着急学习框架,请首先学习python官方文档,一步一个脚印。要不然从入门到放弃是大概率事件。 Python 官方文档教程
快到年末了 相信大家都在忙着处理年末数据 刚好有一个是对超市的商品库存进行分析的学员案例 真的非常简单~
一个简易的问答系统就这样完成了,当然,这个项目还可以进一步完善,比如 将数据存入Elasticsearch,通过它先进行初步的检索,然后再通过这个系统,当然我们也可以用其他的架构实现。如果你对这系统还有其他的疑问,也可以再下面进行留言!!!
#模版继承和页面之间的调用@app.route("/bl")def bl(): return render_template("file_2.html")主ht
#form表达提交@app.route("/data",methods=['GET','POST']) #methods 让当前路由支持GET 和
#form表达提交@app.route("/data",methods=['GET','POST']) #methods 让当前路由支持GET 和
#session 使用app.secret_key = "dsada12212132dsad1232113"app.config['PERMANENT_SESSION_LI
#文件上传@app.route("/file",methods=['GET','POST'])def file(): if request.meth
#跳转操作:redirect@app.route("/red")def red(): return redirect("/login")
#session 使用app.secret_key = "dsada12212132dsad1232113"app.config['PERMANENT_SESSION_LI
@app.route("/req",methods=['GET','POST'])def req(): print(request.headers)
#模版继承和页面之间的调用@app.route("/bl")def bl(): return render_template("file_2.html")主ht
#文件操作:send_file,支持图片 视频 mp3 文本等@app.route("/img")def img(): return send_file("1.jpg&q