2011-11-12 56 views
0

我想發送一封電子郵件給10,000個用戶,但問題是服務器中的進程只能持續60秒。 可以請給出一個計數1億的例子代碼,但它應該由部分完成。我需要確定當它達到59秒時已經過去了多少秒,它應該停止並繼續進行另一個呼叫,以便GAE的60秒限制不會發生。 我不想使用cron作業,但任務隊列將執行。約60秒GAE限制?

感謝您的幫助.. 我真的很感激它..要做到這一點

+0

爲什麼你不想使用cron?它似乎完全適合? –

+0

你能改說你的問題嗎?你能不能把你的代碼放在後端服務中(它沒有60秒的限制)? –

回答

2

一種方法是捕捉期限錯誤,隊列中的新任務

# get current count from task payload 
try: 
    # do something 
    while True: 
     # send email here 
     count++; 

except DeadlineExceededError: 
    # roughly 1 second of before app engine kills this request 
    # Queue new task with updated count 
    taskqueue.add(queue_name='emailqueue', ..., payload = count) 

    # respond with ok so task won't be retried 
    self.response.clear() 
    self.response.set_status(200) 
    self.response.out.write("OK") 

在真正的應用程序,你想通過光標以列表查詢電郵至下一個任務

+0

我只是新的Java。 可否請你給我簡短的示例代碼?.. – user1035079

0

您可以:

  1. 使用任務發送固定數量的電子郵件(比方說100)。然後排隊另一個任務以繼續第一個任務的離開。 (任務僅限10分鐘)。

  2. 使用MapReduce。

  3. 使用後端發送的所有郵件(無期限限制)

  4. 您還可以檢查截止例外,但我不是這種方法的粉絲。

This blog post更多地討論了截止日期的例外情況。