【问题标题】:flask mail, connection closed when sending bulk email烧瓶邮件,发送批量电子邮件时连接关闭
【发布时间】:2016-03-02 00:16:01
【问题描述】:

我有一个基于flask 的web 应用程序和flask-mail (https://pythonhosted.org/flask-mail/) 来发送电子邮件。 我每 5 分钟运行一次 cronjob,它检查数据库中的更新,如果发现更新,它会向所有受这些更新影响的用户发送一堆电子邮件。发送的电子邮件数量可能会如此之大,以至于作业无法在 5 分钟内完成,这意味着 cron 正在并行启动另一个作业。我的理解是,如果 cron 在 5 分钟后仍在运行,它不会杀死旧工作。但是,似乎发生的情况是发送电子邮件的连接在旧工作中关闭了?这意味着在这种情况下,并非所有用户都会收到电子邮件。 这是我发送电子邮件的方式

users = models.User.query.filter_by(query_email_notification=1).all()
if users:
    # Bulk emails... keep connection open
    with app.app_context():
        with mail.connect() as conn:
            for user in users:
                subject = "subject"
                message = 'Hi'
                msg = Message(recipients=[user.email],
                      body=message,subject=subject, sender='me@gmail.com')
                conn.send(msg) 

这基本上遵循烧瓶邮件网站上的主要示例。但是,每当新的 cronjob 启动时,连接就会关闭并且不再发送电子邮件。有谁知道为什么会发生这种情况以及我该如何预防? 一种解决方案是确保 cron 仅在旧作业完成后才开始新作业。但这对 cron 来说似乎很乱。有没有其他软件可以做到这一点? 谢谢卡尔

【问题讨论】:

  • 你怎么知道“连接关闭”?是否产生错误信息?如果是这样,请将确切的错误消息复制粘贴到您的问题中。

标签: python flask cron flask-mail


【解决方案1】:

可以使用flock 序列化长时间运行的 cron 作业。例如,请参阅https://serverfault.com/a/461637/82655

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多