栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django异步方案celery(实现短信发送)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django异步方案celery(实现短信发送)

python编程快速上手(持续更新中…) python实战项目(Django技术点)
1、消息队列接收与使用

A/短信异步发送

B/Cenlery框架-生产者-消费者模式

C/需求分析

2、Celery

Celery官方文档

A/Celery介绍:
一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。
Celery是一个功能完备即插即用的任务队列
单个 Celery 进程每分钟可处理数以百万计的任务。
通过消息进行通信,使用消息队列(broker)在客户端和消费者之间进行协调。

B/安装Celery:

pip install -U Celery

C/创建Celery实例并加载配置

1.apps下新建Celery包:celery_tasks

2.创建Celery实例:main.py

# 0. 为celery的运行 设置Django的环境
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings')

# 1. 创建celery实例
from celery import Celery
# 参数1: main 设置脚本路径就可以了。 脚本路径是唯一的
app=Celery('celery_tasks')

3、加载Celery配置:celery_tasks.config.py

broker_url = “redis://127.0.0.1/15”

4、celery_tasks.main.py 追加

celery_app.config_from_object(‘celery_tasks.config’)

3. 定义发送短信任务

1、celery_tasks下新建包sms包

2、定义任务:celery_tasks.sms.tasks.py

# 生产者 -- 任务,函数
# 1. 这个函数 必须要让celery的实例的 task装饰器 装饰
# 2. 需要celery 自动检测指定包的任务

from libs.yuntongxun.sms import CCP
from celery_tasks.main import app

@app.task
def celery_send_sms_code(mobie,code):

    CCP().send_template_sms(mobie,[code,5],1)

3、celery_tasks.main.py 追加

#3.需要celery 自动检测指定包的任务
#autodiscover_tasks 参数是列表
#列表中的元素是 tasks的路径

app.autodiscover_tasks([‘celery_tasks.sms’,‘celery_tasks.email’])

4.启动Celery服务:celery -A celery_tasks.main worker -l INFO

运行前端:python -m http.server 8080

cd ~/meiduo_project/meiduo_mall
celery -A celery_tasks.main worker -l info

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

出现下面页面,启动成功

补充celery worker的工作模式

默认是进程池方式,进程数以当前机器的CPU核数为参考,每个CPU开四个进程。
如何自己指定进程数: celery worker -A proj --concurrency=4
如何改变进程池方式为协程方式: celery worker -A proj --concurrency=1000 -P eventlet -c 1000

# 安装eventlet模块
$ pip install eventlet
# 启用 Eventlet 池
$ celery -A celery_tasks.main worker -l info -P eventlet -c 1000
5. 调用发送短信任务

#发送短信验证码# CCP().send_template_sms(mobile,[sms_code, 5], 1)# Celery异步发送短信验证码
send_sms_code.delay(mobile, sms_code)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341637.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号