2

1日に100を超えない電子メールメッセージを送信するために、アプリケーションで次のロジックを作成します。

  1. 送信されるすべての電子メールメッセージはデータストアに保存されます。
  2. 15分ごとに実行されるcronジョブがあります。
  3. この仕事は、キューから電子メールメッセージを送信することです。
  4. データストアキューからメッセージを読み取る前に、ジョブはmemcache(is_todays_quota_exceeded)から値を読み取ります。
  5. そうでない場合は、メッセージを送信してみてください。成功した場合は、このメッセージのキューステータスを更新します。で失敗した場合は、等しい値をapiproxy_errors.OverQuotaError書き込みます。is_todays_quota_exceeded1

私が抱えている問題は、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)
4

1 に答える 1

2

クラウドには、この値をリセットするために毎日太平洋標準時の深夜0時より前に実行される別のcronジョブがあります。

1日の終わりを計算する場合は、次のようにします。

>>> from datetime import datetime
>>> timestamp = datetime.utcnow()
>>> end_of_day = datetime(year=timestamp.year, month=timestamp.month, day=timestamp.day, hour=23, minute=59, second=59)
>>> end_of_day
datetime.datetime(2013, 3, 17, 23, 59, 59)

または、その日が始まったばかりであることを知っているかどうかを確認し、それに応じて行動することdatetime.utcnow().hourもできます。0

于 2013-03-17T13:13:35.770 に答える