我想向10,000位用户发送电子邮件,但问题是服务器中的进程只能持续60秒。 你能不能给一个数亿的示例代码,但应该部分完成。我需要确定它已经过了多少秒才达到59秒它应该停止并继续另一个呼叫,以便不会发生GAE的60秒限制。 我不想使用cron作业但任务队列会这样做。
感谢您的帮助.. 我真的很感激..
答案 0 :(得分: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")
在真实应用中,您希望将光标传递给电子邮件列表查询到下一个任务
答案 1 :(得分:0)
你可以:
使用“任务”发送固定数量的电子邮件(假设为100)。然后排队另一个任务继续第一个离开的地方。 (任务限制为10分钟)。
使用MapReduce。
使用后端发送所有电子邮件(没有截止日期限制)
您还可以检查截止日期异常,但我不是该方法的粉丝。
This blog post更多地谈论截止日期例外。