Около 60 секунд GAE предел? - PullRequest
0 голосов
/ 12 ноября 2011

Я хочу отправить электронное письмо 10 000 пользователей, но проблема в том, что процесс на сервере может длиться только 60 секунд.Не могли бы вы привести пример кода, который насчитывает 100 миллионов, но это должно быть сделано по частям.мне нужно определить, сколько секунд прошло, когда оно достигло 59 секунд, оно должно остановиться и перейти к другому вызову, чтобы не наступать ограничение 60 секунд GAE.я не хочу использовать задания cron, но очередь задач подойдет.

спасибо за помощь .. я действительно ценю это.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2011

Один из способов сделать это - зафиксировать ошибку крайнего срока и поставить в очередь новую задачу

# 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 голосов
/ 12 марта 2015

Вы можете:

  1. Используйте Задачи для отправки фиксированного количества писем (скажем, 100). Затем поставьте в очередь другую задачу, чтобы продолжить, где осталось первое. (Задачи ограничены 10 минутами).

  2. Использовать MapReduce.

  3. Использование бэкэндов для отправки всех электронных писем (без ограничений по срокам)

  4. Вы также можете проверить исключения из крайнего срока, но я не фанат этого метода.

В этом блоге немного больше говорится об исключениях из крайнего срока.

...