我已经使用Flask改编了Miquel Grindberg的书(强烈推荐)的异步电子邮件示例来使用flask_sendgrid。但是,此代码导致线程中的异常。它在应用程序第一次运行时工作正常,但它第二次中断。
格林德伯格的例子:
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
我的翻译使用flask_sendgrid。
def send_async_email(app, **kwargs):
with app.app_context():
sendgrid.send_email(**kwargs)
def send_email(to, subject, template, **kwargs):
app = current_app._get_current_object()
html = __flask.render_template(template + '.html', **kwargs)
msg = {'html': html,'subject': subject, 'to_email': to}
thr = Thread(target=send_async_email, args=(app,), kwargs=msg)
thr.start()
return thr
Grindberg的示例适用于我的Google帐户。但是,我想使用Sendgrid卸载我的应用程序的电子邮件。我是否需要自己创建异步或者是否由sendgrid api处理?如果没有,我的代码出了什么问题?
答案 0 :(得分:2)
要handle requests concurrently,您可以使用以下命令运行Flask:
app.run(threaded=True)
默认情况下,Flask使用一个线程运行,因此后续请求将被阻止,直到线程可用。在制作中,您还需要像Gunicorn这样的WSGI容器manage workers and threads。