Flask-mail 发邮件慢(即使异步)
Flask-mail 发邮件慢(即使异步)
一开始,按照狗书上的代码异步发邮件,但是发现原本响应只需要150ms的页面加了邮件发送就变成了5s响应(这怕不是假异步)
狗书的异步发邮件代码:
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
def send_email(to, subject, template, **kwargs):
app = current_app._get_current_object()
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject,
sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
print datetime.datetime.now().second
msg.body = render_template(template + '.txt', **kwargs)
msg.html = render_template(template + '.html', **kwargs)
print datetime.datetime.now().second
thr = Thread(target=send_async_email, args=[app, msg])
thr.start()
print datetime.datetime.now().second
return thr
之后我在每一个可能延时的位置加了一句print datetime.datetime.now().second,最后发现,真正拖时间的地方居然是在Message初始化的时候!
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject,
sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
于是自己优化了一下发邮件的代码,把Message初始化的部分也放进了异步线程中。
优化后,速度明显提升:)
我的优化代码:
def send_async_email(app, to, subject, template_done_html, template_done_txt):
with app.app_context():
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject,
sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
msg.body = template_done_txt
msg.html = template_done_html
mail.send(msg)
def send_email(to, subject, template, **kwargs):
app = current_app._get_current_object()
template_done_html = render_template(template + '.html', **kwargs)
template_done_txt = render_template(template + '.txt', **kwargs)
thr = Thread(target=send_async_email, args=[app, to, subject, template_done_html, template_done_txt])
thr.start()
return thr
Flask-mail 发邮件慢(即使异步)的更多相关文章
- shell中mail发邮件的问题
今天为了监控一下脚本,按照网上说的利用mail 发邮件,mail -s "error预警2" peien@1221.qq.com<'邮件内容',发现出现cc,不知道啥问题,也 ...
- 关于java mail 发邮件的问题总结(转)
今天项目中有需要用到java mail发送邮件的功能,在网上找到相关代码,代码如下: import java.io.IOException; import java.util.Properties; ...
- 关于使用Java Mail发邮件的问题
今天做东西的时候突然遇到需要发邮件的问题,然后就使用SMTP协议进行邮件的发送.用了一个工具类简化邮件发送的功能, 在这次试验中,我使用了自己的QQ邮箱进行发送邮件的发送者. public class ...
- linux lnmp下无法使用mail发邮件的两种解决方法
在配置了lnmp环境后,出现了mail函数不能发送邮件的问题,其实有两种方法,一是使用sendmail组件,而是使用postfix. 方法一,使用sendmail组件来发邮件 1.安装 sendma ...
- spring boot(16)-mail发邮件
上一篇讲了如何处理异常,并且异常最终会写入日志.但是日志是写在服务器上的,我们无法及时知道.如果能够将异常发送到邮箱,我们可以在第一时间发现这个异常.当然,除此以外,还可以用来给用户发验证码以及各种离 ...
- 发现用System.Net.Mail发邮件(代码附后),附件稍微大一点就会造成程序假死. 有没有什么简单的解决办法呢? 多谢!!
附件大,上传,发送一定会慢.程序卡,应该是主线程正在发送,邮件造成的.创建其他线程在后台去发.这样就不影响主线程做其他工作了 using System; using System.Collecti ...
- 利用springframework+javax.mail发邮件(普通邮件、带附件邮件、HTML格式邮件)
Spring提供了发送电子邮件的支持,可以发送普通邮件.带附件邮件.HTML格式邮件,甚至还可以使用Velocity模板定制化邮件内容. 一.引入相关的库 1 2 3 4 5 6 7 8 9 10 1 ...
- mail发邮件报错 "send-mail: fatal: parameter inet_interfaces: no local interface found for ::1"
发送邮件: [root@itfswelog123]# echo '测试邮件标题' | mail -s "数据库挂啦.挂啦.起床啦 " xx@163.com 出现异常: [r ...
- linux mail 发邮件
system('echo "'.$xmlHeader.$xmlBody.$xmlFooter.'" | mail -s "百度新闻源生成成功,地址=>http:// ...
随机推荐
- 马婕 2014MBA专硕考试报刊选读 5 朱令案悬而未决引起全社会的关注(转)
http://blog.sina.com.cn/s/blog_3e66af4601016pkh.html Why hasn’t doubt over poisoning subsided? 公众对于朱 ...
- ACTIVIT 5.15.1修改记录
1.ProcessDefinitionEntity 将 protected transient ActivitiEventSupport eventSupport; 修改成: protected A ...
- 在VMware中设置CentOS7的网络
为了能够使用XShell来管理我们安装好的CentOS7系统,所以我们要先设置CentOS7的网络使其能够联网. 1.选择vmware的编辑,然后点击虚拟网络编辑器 2.点击更改设置(需要有 ...
- Class 'App\Http\Controllers\DB' not found and I also cannot use a new Model
使用laravel的db插入数据 DB::table('tags')->insert( ['name'=>'test'] ); 报错Class 'App\Http\Controllers\ ...
- swift - 动画学习
// // ViewController.swift // MapAnimation // // Created by su on 15/12/10. // Copyright © 2015年 ...
- UISwitch的常见属性
1.onTintColor属性:设置ON一边的背景颜色,默认是绿色. 2.tintColor属性:设置OFF一边的背景颜色,默认是灰色,发现OFF背景颜色其实也是控件”边框“颜色. 3.thumbTi ...
- Sqlite 快速插入数据到本地表中
用原始Insert方法太慢,网上找到了https://www.cnblogs.com/yisen-code/p/6897524.html 思路是: 开启事务,开启预处理,然后把SQL用参数传入具体值来 ...
- java 传参数时 类型后跟 3个点 "..." 的意义
对照代码和运行结果便知"..." 的意义 import java.util.ArrayList; public class StringDemo { public static v ...
- 使用Intellij Idea连接Team Foundation Server (TFS)实现代码版本管理
Intellij Idea是一个Java项目开发工具,支持Windows,MAC OS和Linux的跨平台开发环境,具备良好和智能的用户界面,在欧洲市场拥有很多粉丝.https://www.jetbr ...
- 命令行web客户端与HTTP REST API调试工具
1.命令行web客户端 curl wget httpie 2.优雅的REST API调试工具 insomnia postman