2013-03-17 8 views
2

하루에없는 100 개 이상의 전자 메일 메시지를 보내, 내 응용 프로그램에서 다음과 같은 논리를 만들 : 데이터 저장소에 저장되어 전송 될할당량이 보충 될 때까지 memcache 값을 저장하는 방법은 무엇입니까? 위해

  1. 모든 전자 메일 메시지를;
  2. 15 분마다 실행되는 cron 작업이 있습니다.
  3. 이 작업은 대기열에서 전자 메일 메시지를 보내는 것입니다.
  4. 데이터 스토어 큐에서 메시지를 읽기 전에 작업이 memcache (is_todays_quota_exceeded)에서 값을 읽습니다.
  5. 그렇지 않은 경우 메시지를 보내보십시오. 완료되면이 메시지의 큐 상태를 업데이트하십시오. apiproxy_errors.OverQuotaError으로 실패 할 경우 과 같은 is_todays_quota_exceeded을 작성하십시오.

문제점은 GAE가 끝날 때까지 (즉, 할당량이 보충 될 때까지) memcache 값을 저장해야한다는 것입니다. 얼마나 빨리 계산할 수 있습니까?

매일 할당량은 태평양 표준시 자정에 매일 보충됩니다.

업데이트. 나는 다음을 시도했다 :

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'. 나는 파이썬 2.5를 사용하는데, 나중에 구현 된 total_seconds처럼 보입니다.

2 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) 

답변

2

이 값을 재설정 매일 자정 태평양 시간 전에 실행하는 다른 크론 작업이 있습니다. 당신은 하루의 끝을 계산하려면

,이 같은 수행

>>> 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 경우 당신은 간단하게 확인할 수 있습니다.

+0

흠, 흥미로운 아이디어;). 하지만 그것은 응용 프로그램 논리를 복잡하게 만들 것이라고 생각하므로 memcache 저장소의 정확한 시간을 계산하고 정의하는 것을 선호합니다. –

+0

나는 이것이 어떤 식 으로든 복잡하게한다고 생각하지 않는다. 그것은 하루를 다시 시작하는 매우 간단한 크론 작업이다! 더 많은 것을 정리할 수 있고, 시간을 계산할 때'datatime.utcnow()'를 사용하는 것을 멈출 것인가? – Lipis

+0

계산과 관련하여 - 내가 가진 첫 번째 질문은 오늘의 끝을 계산하는 방법입니다. 날짜, 시간, 시간 = 23, 분 = 59, 초 = 60)'? –