Celery介绍--手机短信异步发送

python 异步定时任务 python 异步定时任务,简单实现异步发送短信验证码、QQ邮箱(配置在上面博客中)及定时任务 阅读详情

1.Celery介绍

1.1 celery应⽤举例
  • Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处
    理,如果你的业务场景中需要⽤到异步任务,就可以考虑使⽤celery
  • 你想对100台机器执⾏⼀条批量命令,可能会花很⻓时间 ,但你不想让你的程序等着结果返回,⽽ 是给你返回
    ⼀个任务ID,你过⼀段时间只需要拿着这个任务id就可以拿到任务执⾏结果, 在任务执 ⾏ing进⾏时,你可以继续做其它的事情
  • Celery 在执⾏任务时需要通过⼀个消息中间件来接收和发送任务消息,以及存储任务结果, ⼀般 使⽤rabbitMQ or Redis
1.2 Celery有以下优点
  • 简单:⼀单熟悉了celery的⼯作流程后,配置和使⽤还是⽐较简单的
  • ⾼可⽤:当任务执⾏失败或执⾏过程中发⽣连接中断,celery 会⾃动尝试重新执⾏任务
  • 快速:⼀个单进程的celery每分钟可处理上百万个任务
  • 灵活: ⼏乎celery的各个组件都可以被扩展及⾃定制
1.3 Celery 特性
  • ⽅便查看定时任务的执⾏情况, 如 是否成功, 当前状态, 执⾏任务花费的时间等.
  • 可选 多进程, Eventlet 和 Gevent 三种模型并发执⾏.
  • Celery 是语⾔⽆关的.它提供了python 等常⻅语⾔的接⼝⽀持.

2.celery 组件

2.1 Celery 扮演⽣产者和消费者的⻆⾊
  • Celery Beat : 任务调度器. Beat 进程会读取配置⽂件的内容, 周期性的将配置中到期需要执⾏的任 务发送给任务队列.
  • Celery Worker : 执⾏任务的消费者, 通常会在多台服务器运⾏多个消费者, 提⾼运⾏效率.
  • Broker : 消息代理, 队列本身. 也称为消息中间件. 接受任务⽣产者发送过来的任务消息, 存进队列
    再按序分发给任务消费⽅(通常是消息队列或者数据库).
  • Producer : 任务⽣产者. 调⽤ Celery API , 函数或者装饰器, ⽽产⽣任务并交给任务队列处理的都 是任务⽣产者.
  • Result Backend : 任务处理完成之后保存状态信息和结果, 以供查询.
2.2 celery架构图(⽣产者消费者模型)

在这里插入图片描述
在这里插入图片描述

2.3 产⽣任务的⽅式
  • 发布者发布任务(WEB 应⽤)
  • 任务调度按期发布任务(定时任务)

2.4 celery 依赖三个库: 这三个库, 都由 Celery 的开发者开发和维
护.
billiard : 基于 Python2.7 的 multisuprocessing ⽽改进的库, 主要⽤来提⾼性能和稳定性.
librabbitmp : C 语⾔实现的 Python 客户端
kombu : Celery ⾃带的⽤来收发消息的库, 提供了符合 Python 语⾔习惯的, 使⽤ AMQP 协议的⾼
级借⼝.

3、celery的使⽤

推荐版本

python 3.6
Django == 2.2.6
django-celery == 3.3.1
django-redis == 4.11.0
redis == 2.10.6
celery == 3.1.26.post2

  • Settings.py
#settings.py
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/2'
INSTALLED_APPS = [
 ...
 "djcelery",
 ...
]

  • 创建celery所需要的表
python manage.py migrate
#如若不成功可以尝试⼀下命令语句
#python manage.py syncdb

  • 创建task   在app⾥建⽴tasks.py⽂件来写⼊需要执⾏的异步任务
###############verificationsapp/tasks.py########
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from code2001B.settings import ALY_ACCESSKEY_ID,ALY_ACCESSKEY_SECRET
import json,time
from celery import task
@task
def send_sms(phone,data):
 # client = AcsClient(ALY_ACCESSKEY_ID, ALY_ACCESSKEY_SECRET, 'cnhangzhou')
 #
 # #data ={ "code" : 123456 }
 #
 # request = CommonRequest()
 # request.set_accept_format('json')
 # request.set_domain('dysmsapi.aliyuncs.com')
 # request.set_method('POST')
 # request.set_protocol_type('https') # https | http
 # request.set_version('2017-05-25')
 # request.set_action_name('SendSms')
 #
 # request.add_query_param('RegionId', "cn-hangzhou")
 # request.add_query_param('PhoneNumbers', phone)
 # request.add_query_param('SignName', "商品")
 # request.add_query_param('TemplateCode', "SMS_185212884")
 # request.add_query_param('TemplateParam', data)
 # response1 = client.do_action(request)
 # # python2: print(response)
 # res = json.loads(str(response1, encoding='utf-8'))
 time.sleep(5)
 return 5+10
a、当settings.py中的djcelery.setup_loader()运⾏时, Celery便会查看所有INSTALLED_APPS中app⽬录中的tasks.py⽂件, 找到标记为task的function, 并将它们注册为celery task.
b、在执⾏djcelery.setup_loader()时, task是以INSTALLED_APPS中的app名,加.tasks.function_name注册的
c、⼀次需要注意 在impprt task时, 需要保持⼀致
d、如果我们由于python path不同⽽使⽤不同的引⽤⽅式时(例如在tasks.py中使⽤frommyproject.myapp.tasks import add形式), Celery将⽆法得知这是同⼀task, 因此可能会引起奇怪的bug。
1234
  • views.py⾥让任务异步执⾏
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from libs.captcha.captcha import captcha
from django.http.response import HttpResponse
import random
from verificationsapp.tasks import send_sms
from django_redis import get_redis_connection

class SendSMSCode(APIView):
	def post(self,request):
		phone = request.data.get("phone")
		image_code = request.data.get("image_code")
		image_code_uuid = request.data.get("image_code_uuid")
		print(phone)
		print(image_code_uuid)
		print(image_code)
		if not all([phone,image_code,image_code_uuid]):
		return Response({"code":4005,"msg":"参数不全"})
		#先获取redis ⾥的图⽚验证码来⽐对
		redis_cli = get_redis_connection("img_code")
		redis_img_code = redis_cli.get(image_code_uuid).decode()
		print(redis_img_code)
		print(image_code)
		if image_code.lower() != redis_img_code.lower():
		return Response({"code":4003,"msg":"参数错误"})
		#发送短信
		num = random.randint(100000,999999)
		print(num)
		send_data = {"code":10086}
		send_sms.delay(phone,send_data)
		# 删除redis⾥的image_code,保存phone_code
		#pipeline管道:作⽤就是把多个命令放在⼀起来执⾏
		pl = redis_cli.pipeline()
		pl.setex(phone,60*5,num)
		pl.delete(image_code_uuid)
		pl.execute()
		return Response({"code":0,"msg":"发送成功"})

  • 启动celery   ⾸先正常启动你的django任务,然后启动celery服务即可。
python manage.py celery worker --loglevel=info
1

如果报错不让超级管理员来启动,在settings.py加⼊以下配置

from celery import Celery, platforms
platforms.C_FORCE_ROOT = True
12

4、注册功能的完善

class UserView(APIView):
	def post(self,request):
		data = request.data
		# print(data)
		if not all([data.get('username'),data.get('password'),
		data.get('phone')]):
		return Response({"code":4003,'msg':"参数不完整"},status=200)
		# if data["password"] != data["password2"]:
		# return Response({"code": 4005, 'msg': "两次密码不⼀致"},
		status=200)
		redis_cli = get_redis_connection("img_code")
		redis_phone_num = redis_cli.get(data.get("phone")).decode()
		if redis_phone_num != data.get("code"):
		return Response({"code": 4005, 'msg': "短信验证码错误"}, status=200)
		try:
		user = serializers.CreateUserSer(data=data)
		user.is_valid()
		print(user.errors)
		user.save()
		res_data = {
		"code":0,
		"msg":"创建成功",
		"data":user.data
		}
		return Response(res_data)
		except Exception as e:
		# raise e
		res_data = {
		"code": 4009,
		"msg": "创建失败请重试",
		}
		return Response(res_data)
QQ邮箱/163邮箱 SMTP 服务配置:3步获取16位授权码,解决535报错 本文详细介绍了QQ邮箱和163邮箱SMTP服务的配置方法,包括如何获取16位授权码、解决535报错问题,并提供了Python实战示例。通过授权码机制提升邮件发送安全性,适用于开发者和企业用户实现高效邮件通信。 阅读详情

相关推荐

消息通知系统实现:构建高可用、可扩展的企业级通知服务

本文介绍了一个企业级消息通知系统的设计与实现方案。系统采用分层架构,包含消息接收器、消息队列、处理器和渠道分发器等核心组件,支持邮件、短信、推送和站内信等多种通知方式。技术栈选用RabbitMQ/Kafka作为消息队列,PostgreSQL存储数据,Redis缓存模板和用户偏好。系统提供模板管理、用户偏好设置、异步处理、失败重试和监控告警等完整功能,通过抽象模板引擎实现消息内容的动态渲染。该方案具有高可用、可扩展的特点,能够满足不同业务场景下的通知需求。

闲人编程的博客 941

异步发送短信(celery)

【代码】异步发送短信(celery)

python_web全栈 274

微软登录OAuth 2.0授权流程

OAuth 2.0是一个关于授权的开放网络标准,它允许第三方应用获取用户数据,是目前最流行的授权机制。微软身份平台支持OAuth 2.0授权码流程,使得客户端应用程序能够获得对受保护资源(如网络API)的授权访问。这一流程在保障用户数据安全的前提下,实现了应用的便捷登录与数据共享。当用户在一个支持OAuth 2.0的应用上,希望使用微软账号进行登录时,OAuth 2.0授权流程即被触发。

qq_36569837的博客 4086

手机异步发送短信验证码解决方案-Celery+redis

异步任务发送短信 celery+redis

Mr_WoLong 1255

表面声波滤波器——叉指换能器设计实战:从关键参数到结构选型

本文深入探讨了表面声波滤波器核心部件叉指换能器的实战设计流程。从目标驱动出发,详细解析了如何根据中心频率确定关键参数指宽,并权衡叉指对数对带宽和插入损耗的影响。文章进一步介绍了通过变迹加权优化频率响应,并对比了梯形结构与纵向耦合谐振滤波器等主流结构选型的适用场景与优缺点,为工程师提供从理论计算到仿真验证的完整设计指南。

weixin_29216353的博客 103

Ubuntu 22.04下Nvidia显卡驱动安装全攻略:从PPA源到避坑指南

本文详细介绍了在Ubuntu 22.04系统下安装Nvidia显卡驱动的完整流程,包括PPA源的使用、旧驱动清理、安装后验证及常见问题解决方案。特别针对机器学习开发者和图形设计师,提供了从基础安装到性能调优的全方位指南,帮助用户避免常见安装陷阱并优化GPU性能。

weixin_29213655的博客 381

Celery介绍——手机短信异步发送

1.Celery介绍 1.1 celery应⽤举例 Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处 理,如果你的业务场景中需要⽤到异步任务,就可以考虑使⽤celery 你想对100台机器执⾏⼀条批量命令,可能会花很⻓时间 ,但你不想让你的程序等着结果返回,⽽ 是给你返回 ⼀个任务ID,你过⼀段时间只需要拿着这个任务id就可以拿到任务执⾏结果, 在任务执 ⾏ing进⾏时,你可以继续做其它的事情 Celery 在执⾏任务时需要通过⼀个消息中间件来接收和

weixin_49319422的博客 2585

C# WPF多页面间的数据共享(经典)

实现页面间的数据共享有很多方法,比如:①事件的发布订阅 ②委托③ioc容器④静态类等,这节主要通过静态的集合实现数据的添加和获取。

sf315418的博客 638

Celery介绍---手机短信异步发送

1.Celery介绍 1.1 celery应⽤举例 Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处 理,如果你的业务场景中需要⽤到异步任务,就可以考虑使⽤celery 你想对100台机器执⾏⼀条批量命令,可能会花很⻓时间 ,但你不想让你的程序等着结果返回,⽽ 是给你返回 ⼀个任务ID,你过⼀段时间只需要拿着这个任务id就可以拿到任务执⾏结果, 在任务执 ⾏ing进⾏时,你可以继续做其它的事情 Celery 在执⾏任务时需要通过⼀个消息中间件来接收和

cam1234567890的博客 598

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介

Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流

行知SLAM 2437

Celery---手机短信异步发送

celery应用举例 Celery 是⼀个 基于python开发的 分布式异步消息任务队列 ,通过它可以轻松的实现任务的异步处 理,如果你的业务场景中需要⽤到异步任务,就可以考虑使⽤celery 你想对100台机器执⾏⼀条批量命令,可能会花很⻓时间 ,但你不想让你的程序等着结果返回,⽽ 是给你返回 ⼀个任务ID,你过⼀段时间只需要拿着这个任务id就可以拿到任务执⾏结果, 在任务执 ⾏ing进⾏时,你可以继续做其它的事情 Celery 在执⾏任务时需要通过⼀个消息中间件来接收和发送任务消息,以及存储任务结果

Quanliangxu的博客 211

MATLAB使用贝叶斯网络bnt工具箱:使用手册详解

MATLAB使用贝叶斯bnt网络工具箱:使用手册详解

WW、forever的博客 2676

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

python编程快速上手(持续更新中…) python实战项目(Django技术点) 1、消息队列接收与使用 A/短信异步发送 B/Cenlery框架-生产者-消费者模式 C/需求分析 2、Celery Celery官方文档 A/Celery介绍: 一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。 Celery是一个功能完备即插即用的任务队列 单个 Celery 进程每分钟可处理数以百万计的任务。 通过消息进行通信,使用消息队列(broker)在客户端和消费者之间进行协调

IT瘾君子的博客 720

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2033

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Django项目后端实现注册功能---异步发送短信(celery)。

代码gitee仓库:代码仓库 一, 为什么要使用celery异步发送短信? 发送短信是耗时操作,影响响应时间,响应延迟会造成用户界面的倒计时延迟。 二,实现目的。 用户点击完获取后,视图越快响应,就能越快显示倒计时,加快短信发送到用户的时间。 三,celery异步发送短信—过程。 1.python3安装celery(环境:windows10;python版本:python3.9) pip install -U Celery 2.在项目根目录创建一个单独的包,用来存放celery相关的配置文件和主要

yangyue0205的博客 427

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Flask使用celery发送邮件和发送短信验证码

邮箱: qq邮箱 手机验证码: 云通讯手机验证码 tasks.py from flask import Flask from flask_mail import Message from celery import Celery from exts import mail from libs.yuntongxun.sms import CCP import config app = Fl...

xiao-啸 1196

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

容联云:实现异步 手机短信验证码

Ben_boba的博客 1059

魔方APP项目-06-用户注册,完成短信验证码的校验、基于Celery实现短信异步发送、用户登录,jwt登陆认证、服务端提供用户登录的API接口

一、用户注册… 1.完成短信验证码的校验 application.utils.language.message,代码: class ErrorMessage(): ok = "ok" mobile_format_error = "手机号码格式有误!" mobile_is_use = "对不起,当前手机已经被注册!" username_is_use = "对不起,当前用户名已经被使用!" password_not_match = "密码和验证密码不匹配!" sm

Hi文的博客 670

基于Django开发的购物网站,类似于京东商城Django_Store

Django_Store 本项目基于Django1.11.11等来开发一个购物商城Web程序,本项目集成注册,登录,购物,购物车,评论,搜索,第三方qq登录,微信登录,手机号登录,支付宝支付等功能 Github地址:https://github.com/Sjj1024/Django-Store 重点内容有: Redis实现购物车记录存储 Redis实现最近浏览记录存储 发送手机短信验证码以Celery异步操作实现 发送注册邮件以Celery异步操作实现 网站优化之首页动态页面静态化——以Ce

2678

django-rest-framework-passwordless:彻底告别密码!现代无密码认证方案全解析

在当今数字化时代,密码已经成为用户体验的最大障碍之一。忘记密码、重置密码的繁琐流程让用户感到沮丧,而密码泄露的安全隐患更是令人担忧。django-rest-framework-passwordless 提供了一个优雅的解决方案:彻底告别传统密码,通过电子邮件或手机短信实现安全便捷的无密码认证。这个 Django REST Framework 插件让开发者能够轻松为 API 添加现代化的无密码认证功

gitblog_00411的博客 499

手机号获取验证码进行登录注册

使用容联云获取验证码,进行用户登录+注册,获取手机验证码使用异步,使用token。提示:以下是本篇文章正文内容,下面案例可供参考创建前后端项目后端项目中写入容联云SDK、异步、Token创建模型编写获取验证码与登录接口前端编写登录模板获取手机号验证码按钮与登录按钮绑定点击事件并写入后端接口完成测试。

zcy3536的博客 1万+

Django框架DRF开发的东京购物商城项目,支持qq登录、购物车、评论、搜索、支付宝支付等功能

Django_Store 本项目基于Django1.11.11等来开发一个购物商城Web程序,采用前后端分离mvt设计模式,本项目集成注册,登录,购物,购物车,评论,搜索,第三方qq登录,微信登录,手机号登录,支付宝支付等功能 GitHub地址: https://github.com/Sjj1024/Django-Store 重点内容有: Redis实现购物车记录存储 R...

1601
上一篇: 第三方登录-微博
下一篇: django-celery-redis异步发邮件
chenliang8518
博客等级 码龄6年 0粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值