Flask发QQ邮件太慢了(即使是异步),原本150ms响应的页面加了邮件变成了5s,请问各位大神有没有比较简单的解决方法?现在我很疑惑的是,既然我已经新开一个线程来发邮件,按理视图业务不会等待他发送完邮件而会直接继续响应,但是实际情况是视图业务被阻塞了5s部分代码(按照狗书写的):defsend_async_email(app,msg):withapp.app_context():mail.send(msg)defsend_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])msg.body=render_template(template+'.txt',**kwargs)msg.html=render_template(template+'.html',**kwargs)thr=Thread(target=send_async_email,args=[app,msg])thr.start()returnthr
2 回答

偶然的你
TA贡献1841条经验 获得超3个赞
不是特别了解flask,也没太看懂你写的啥,但有一点,你异步发邮件也会从150ms变成5s?这里大有问题,应该只有三种可能会这样等待网络I/O的部分根本没有放到异步任务里(你可能把无关紧要的部分当成耗时的I/O部分放到异步任务里了)开的新线程用到的变量有锁,直到邮件发送完才释放,而处理请求的线程在处理完请求前一直在等待发邮件的线程释放锁(或者是处理请求的线程自身的机制导致阻塞,也可能是你在请求处理结束前主动调用了.join导致阻塞)在你的场景里,发送邮件是CPU密集型任务,这多出来的4秒多全花在CPU拼命运算如何发邮件上第三种不太可能,你多加几行输出,排查一下前两种可能
添加回答
举报
0/150
提交
取消