烧瓶send_grid异步电子邮件

时间:2017-04-06 09:53:28

标签: python asynchronous flask sendgrid

我已经使用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处理?如果没有,我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

handle requests concurrently,您可以使用以下命令运行Flask:

app.run(threaded=True)

默认情况下,Flask使用一个线程运行,因此后续请求将被阻止,直到线程可用。在制作中,您还需要像Gunicorn这样的WSGI容器manage workers and threads