メールを送信するために、flask-mail ( https://pythonhosted.org/flask-mail/ )と一緒にフラスコに基づく Web アプリケーションがあります。データベースの更新をチェックするcronjobを5分ごとに実行しています。更新が見つかった場合は、これらの更新の影響を受けるすべてのユーザーに一連の電子メールを送信します。送信される電子メールの数が多すぎてジョブが 5 分以内に終了しない場合があります。これは、cron が別のジョブを並行して開始していることを意味します。私の理解では、5分後にまだ実行されている場合、cronは古いジョブを強制終了しません。ただし、古いジョブでメール送信用の接続が閉じられてしまうのはどうですか? その場合、すべてのユーザーが電子メールを受け取るわけではないことを意味します。これが私がメールを送信する方法です
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)
これは、基本的にフラスコメール Web サイトの主な例に従っています。ただし、新しい cronjob が開始されるたびに接続が閉じられ、メールは送信されなくなります。なぜこれが起こるのか、どうすればそれを防ぐことができるのか誰にもわかりませんか? 解決策の 1 つは、古いジョブが終了した場合にのみ cron が新しいジョブを開始するようにすることです。しかし、それはcronでは面倒です。それを行うことができる他のソフトウェアはありますか?ありがとうカール