我想發送一封電子郵件給10,000個用戶,但問題是服務器中的進程只能持續60秒。 可以請給出一個計數1億的例子代碼,但它應該由部分完成。我需要確定當它達到59秒時已經過去了多少秒,它應該停止並繼續進行另一個呼叫,以便GAE的60秒限制不會發生。 我不想使用cron作業,但任務隊列將執行。約60秒GAE限制?
感謝您的幫助.. 我真的很感激它..要做到這一點
我想發送一封電子郵件給10,000個用戶,但問題是服務器中的進程只能持續60秒。 可以請給出一個計數1億的例子代碼,但它應該由部分完成。我需要確定當它達到59秒時已經過去了多少秒,它應該停止並繼續進行另一個呼叫,以便GAE的60秒限制不會發生。 我不想使用cron作業,但任務隊列將執行。約60秒GAE限制?
感謝您的幫助.. 我真的很感激它..要做到這一點
一種方法是捕捉期限錯誤,隊列中的新任務
# 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")
在真正的應用程序,你想通過光標以列表查詢電郵至下一個任務
我只是新的Java。 可否請你給我簡短的示例代碼?.. – user1035079
您可以:
使用任務發送固定數量的電子郵件(比方說100)。然後排隊另一個任務以繼續第一個任務的離開。 (任務僅限10分鐘)。
使用MapReduce。
使用後端發送的所有郵件(無期限限制)
您還可以檢查截止例外,但我不是這種方法的粉絲。
This blog post更多地討論了截止日期的例外情況。
爲什麼你不想使用cron?它似乎完全適合? –
你能改說你的問題嗎?你能不能把你的代碼放在後端服務中(它沒有60秒的限制)? –