0

メールを送信するために、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では面倒です。それを行うことができる他のソフトウェアはありますか?ありがとうカール

4

1 に答える 1

1

flock実行時間の長い cron ジョブをシリアル化するために使用できます。たとえば、https://serverfault.com/a/461637/82655を参照してください。

于 2016-03-01T16:16:01.720 に答える