一百四十七:CMS系统之celery实现邮件和短信异步发送
celery工作原理
celery官方文档:https://docs.celeryproject.org/en/latest/
安装:pip install celery
windows下还需安装eventlet来做任务调度:pip install eventlet
启动redis,已将redis密码设为为123456
简单示例
import time
from celery import Celery
celery = Celery('tasks',
broker='redis://:123456@192.168.223.128:6379/0',
backend='redis://:123456@192.168.223.128:6379/0')
@celery.task
def send_email():
print('邮件开始发送...')
time.sleep(2)
print('邮件发送结束...')
执行命令监控命令:celery -A tasks.celery --pool=eventlet worker --loglevel=info
运行发邮件操作
实现异步发送邮件和短信验证码
flask推荐的使用celery的方法:https://flask.palletsprojects.com/en/1.0.x/patterns/celery/
config中配置信息
CELERY_RESULT_BACKEND = 'redis://:123456@192..128:6379/0'
CELERY_BROKER_URL = 'redis://:123456@192..128:6379/0'
task代码
from celery import Celery
from flask_mail import Message
from exts import mail
import config
# 防止循环引用,在这里创建一个独立的app
from flask import Flask
app = Flask(__name__)
app.config.from_object(config)
mail.init_app(app)
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)
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*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)
执行监听:celery -A tasks.celery --pool=solo worker --loglevel=info
在发邮件的地方改为异步
执行修改
短信验证码
关于运行监听命令:
win:celery -A tasks.celery --pool=solo worker --loglevel=info
linux:celery -A tasks.celery worker --loglevel=info
讨论群:249728408
分类:
flask-web开发
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)