今天在做用户注册发送激活邮件时,看到邮件发送比较耗时,而且界面会卡在哪里,当时啪一下,马上就想到了使用多线程发送异步邮件,很快嗷。
但是,实现了后运行发现什么运行在什么之外,什么应用上下文上下文,马上看了下官方文档http://www.pythondoc.com/flask/appcontext.html,吧啦吧啦的。
下面完整代码,send_email.py,最关键的是应用上下文app.app_context()
from flask_mail import Message
from exts import mail # 已经初始化过的mail对象
import threading
def async_send_mail(msg):
'''异步发送邮件'''
# 刚开始app还没创建,所在在使用到的时候再导入
from app import app
# 创建应用上下文(这里是最关键的)
with app.app_context():
mail.send(message=msg)
def send_mail(email=None, token=None):
'''发送激活邮件
email:收件人邮箱
token:加密传输令牌
'''
msg = Message(subject='主题', recipients=[email])
msg.html = '''
<h1>欢迎注册</h1>
点击下面链接激活账号(24小时后过期)<br>
<a href="http://127.0.0.1:8000/?token=token">立即激活</a>
'''
# 创建一个线程,并启动
t = threading.Thread(target=async_send_mail, args=(msg))
t.start()
if __name__ == '__main__':
print('pass')