В моем приложении мне нужно отправлять электронные письма большому числу пользователей, когда происходит событие. Я бы хотел отправить эти электронные письма постепенно, а не сразу. Для ясности объяснения, скажем, мне нужно отправить электронные письма 10 000 пользователям.Целевые очереди GAE с ETA и большое количество задач
В настоящее время я делаю это с очередью задач с максимальной скоростью 1 задачи/секунду. Я запускаю 10 000 заданий в партиях, и электронные письма отправляются со скоростью 1/секунду.
Я хотел бы изменить это на использование ETA для задач, а не ограничивать очередь задач до максимальной скорости. Концептуально это было бы, как это (кроме того, что представление задачи будет порционный):
now = datetime.utcnow()
for i, email in enumerate(email_list):
eta = now + datetime.timedelta(seconds=i)
deferred.defer(send_email, email, _eta=eta)
Перед внедрением изменений, как это, я хотел бы иметь некоторую уверенность в том, что GAE может сделать это эффективно.
Если у меня есть 10 000 задач в очереди задач, каждая с другой ETA, будет ли очередь задач GAE эффективно контролировать все задачи и запускать их примерно (точное значение ETA не важно) в соответствующие моменты времени ? Я не знаю, какой алгоритм Google использует для этого.
EDIT:
Представьте себе, если вы вставили миллиард задач в один день каждый с ETA. Как GAE будет контролировать эти задачи, чтобы убедиться, что их уволили в нужное время? Опрос всех заданий за определенный промежуток времени (например, каждую минуту) был бы ужасным решением. Возможно, GAE использует некоторую очередь приоритетов. Было бы неплохо иметь некоторую уверенность в том, что GAE внедрил алгоритм, который будет масштабироваться для множества задач с помощью ETA.
Приятно знать, что он хорошо работает с использованием _eta для множества задач. Я обнаружил, что другие очереди задач не работают должным образом. –