1日に100を超えない電子メールメッセージを送信するために、アプリケーションで次のロジックを作成します。
- 送信されるすべての電子メールメッセージはデータストアに保存されます。
- 15分ごとに実行されるcronジョブがあります。
- この仕事は、キューから電子メールメッセージを送信することです。
- データストアキューからメッセージを読み取る前に、ジョブはmemcache(
is_todays_quota_exceeded
)から値を読み取ります。 - そうでない場合は、メッセージを送信してみてください。成功した場合は、このメッセージのキューステータスを更新します。で失敗した場合は、等しい値を
apiproxy_errors.OverQuotaError
書き込みます。is_todays_quota_exceeded
1
私が抱えている問題は、GAE日の終わりまで(つまり、クォータが補充されるまで)memcache値を保存する必要があることです。どうすればそれを秒単位で計算できますか?
1日の割り当ては、太平洋時間の深夜に毎日補充されます。
Upd。私は次のことを試しました:
now = datetime.datetime.now()
current_time = datetime.datetime(year=now.year, month=now.month, day=now.day, hour=now.hour, minute=now.minute, second=now.second)
end_of_today = datetime.datetime(year=now.year, month=now.month, day=now.day, hour=23, minute=59, second=59)
diff = end_of_today - current_time
logging.info(diff.total_seconds())
しかし、それは最後の行で失敗します- 'datetime.timedelta' object has no attribute 'total_seconds'
。私はPython2.5を使用していますが、total_seconds
後で実装されたようです。
Upd2。以下は、今日の終わりまでの秒数を計算するのに役立ちます。
now = datetime.datetime.utcnow()
diff = (23*60*60 + 59*60 + 59*60) - (now.hour*60*60 - now.minute*60 - now.second*60)
logging.info(diff)