Добро пожаловать в переполнение стека!
Очередь задач создана для решения этой проблемы. Вы можете использовать его с минимальными изменениями в существующем коде, используя отложенную библиотеку :
Вместо того, чтобы звонить message.send()
, сделайте что-то вроде этого:
def send_email(message):
message.send()
deferred.defer(send_email, message)
Это создаст пакет специальных задач, которые отправят ваши электронные письма в фоновом режиме, после того как ваш основной обработчик запросов вернется. Некоторые из этих задач, вероятно, не будут выполнены с первой попытки, поскольку ваше приложение достигнет краткосрочных пределов квоты для исходящей почты. Это нормально; сбойные задачи будут откатываться и повторяться автоматически до тех пор, пока они не будут выполнены.
Редактировать: О, и возьмите sleep
из своего кода. =) * * 1 018
Редактирование # 2: Вы можете ускорить процесс, переместив urlfetch в задачу, чтобы каждая задача извлекала один URL-адрес, а затем отправляла одно электронное письмо. Извлечение 22 URL-адресов в одном обработчике запросов может быть достаточным для истечения времени ожидания независимо от отправки почты.