为了每天发送不超过 100 封电子邮件,我在我的应用程序中创建了以下逻辑:
- 所有要发送的电子邮件信息都存储在数据存储中;
- 有一个 cron 作业,每 15 分钟运行一次;
- 这项工作是从队列中发送电子邮件消息;
- 在从 Datastore 队列中读取消息之前,作业会从 memcache (
is_todays_quota_exceeded
) 中读取值; - 如果不是,请尝试发送消息。如果成功,则更新此消息的队列状态。如果它失败了
apiproxy_errors.OverQuotaError
,写is_todays_quota_exceeded
等于1
。
我遇到的问题是我应该将 memcache 值存储到 GAE 日结束(即直到配额被补充)。我怎样才能在几秒钟内计算出来?
每日配额每天在太平洋时间午夜补充。
更新。我尝试了以下方法:
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'
。我用的是 Python 2.5,貌似total_seconds
是后来实现的。
更新2。以下有助于计算到今天结束的秒数:
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)