Блокировка Google App Engine - PullRequest
5 голосов
/ 24 мая 2011

просто интересно, сталкивался ли кто-нибудь из вас с этим.Я работаю с почтовым API Python на Google App Engine и создал приложение, которое принимает тело и адрес сообщения через POST, создает сущность в хранилище данных, затем каждую минуту запускается задание cron, захватывает 200 сущностей и отправляетиз электронных писем, а затем удаляет сущности.

Я провел эксперимент с 1500 письмами, в хранилище данных было создано 1500 сущностей и было отправлено 1500 писем.Затем я смотрю на мою статистику и вижу, что ок.45 000 получателей были использованы из квоты, как это возможно?

Итак, мой вопрос: в какой момент квота "Получатели по электронной почте" фактически считается?В момент, когда я создаю почтовый объект или когда я на самом деле send() это?Я надеялся на второе, но квоты, кажется, показывают что-то другое.Я передаю почтовый объект между кронами и задачами и т. Д. У кого-нибудь есть информация по этому поводу?

Спасибо.

Обновление : Оказывается, я действительно отправлял45 тыс. Электронных писем с очередью всего 1500. Кажется, что одно задание cron выполняется до тех пор, пока не будет завершено предыдущее, и работает с теми же сущностями.Поэтому вопрос меняется на «как заблокировать сущности и убедиться, что никто не выберет их перед отправкой писем»?

Еще раз спасибо!

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Используйте задачи для отправки электронного письма.

Создайте задачу, которая принимает ключ в качестве аргумента, извлекает сохраненную сущность для этого ключа, затем отправляет электронное письмо.

Когда ваш обработчик получаеттело и адрес, сохраните это, как вы делаете сейчас, но затем поставьте задачу в очередь для отправки и передайте ключ вашего объекта хранилища данных в задачу, чтобы она знала, для какого объекта отправить электронное письмо.

Вы можетеобнаружите, что тело и адрес достаточно малы, чтобы вы могли просто передать их в качестве аргументов в задачу и попросить задачу отправить электронное письмо, не сохраняя ничего непосредственно в хранилище данных.

Это также имеет то преимущество, что еслиВы хотите наложить ограничение на количество электронных писем, отправляемых в течение определенного периода времени (квота), вы можете настроить очередь задач с такой скоростью.

2 голосов
/ 24 мая 2011

Создание объекта электронной почты, безусловно, не засчитывается в вашу квоту "получателей по электронной почте".Как и другие службы App Engine, вы используете квоту, когда запускаете RPC, то есть звоните send().

Если вы намеревались отправить 1500 получателей по электронной почте, а App Engine сообщило, что вы отправили 45 000 по электронной почте, ваш код содержит ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...