Flask发邮件慢(即使是异步)

Flask发QQ邮件太慢了(即使是异步),原本150ms响应的页面加了邮件变成了5s,请问各位大神有没有比较简单的解决方法?

现在我很疑惑的是,既然我已经新开一个线程来发邮件,按理视图业务不会等待他发送完邮件而会直接继续响应,但是实际情况是视图业务被阻塞了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])
    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()    return thr


白猪掌柜的
浏览 515回答 2
2回答

天涯尽头无女友

不是特别了解flask,也没太看懂你写的啥,但有一点,你异步发邮件也会从150ms变成5s?这里大有问题,应该只有三种可能会这样等待网络I/O的部分根本没有放到异步任务里(你可能把无关紧要的部分当成耗时的I/O部分放到异步任务里了)开的新线程用到的变量有锁,直到邮件发送完才释放,而处理请求的线程在处理完请求前一直在等待发邮件的线程释放锁(或者是处理请求的线程自身的机制导致阻塞,也可能是你在请求处理结束前主动调用了.join导致阻塞)在你的场景里,发送邮件是CPU密集型任务,这多出来的4秒多全花在CPU拼命运算如何发邮件上第三种不太可能,你多加几行输出,排查一下前两种可能
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python