распределенная обработка электронной почты в django / celery

У меня есть приложение Django, которое должно отслеживать учетную запись электронной почты, на которую пользователи отправляют электронные письма. Например, он сохранит тему электронного письма в базе данных, если отправитель уже зарегистрирован. Настоящее приложение сложнее, чем этот пример, поэтому я хочу настроить задачу сельдерея для обработки электронной почты в фоновом режиме распределенным способом. У меня уже есть задача с сельдереем для асинхронной отправки писем, но есть несколько вопросов, по которым я хотел бы узнать ваше мнение об обработке полученных писем:

1) есть ли способ постфикса (или чего-то еще подобного) для PUSH новых писем в скрипт python? Если нет, то я должен периодически опрашивать почту от сельдерея, верно?

2) чтобы убедиться, что каждое электронное письмо обрабатывает один и только один работник, что из следующего лучше?

  • чтобы одна задача опрашивала почтовый ящик, а затем распределяла задания среди нескольких рабочих для обработки (например, каждый работник получает N электронных писем)

  • чтобы несколько сотрудников опрашивали почтовый ящик, и каждый получал несколько писем

3) для опроса почтового ящика, поскольку я могу получить доступ к почтовому серверу напрямую, я предполагаю, что опрос файлов более эффективен, чем опрос через IMAP. есть ли обратная сторона этого?

моя текущая схема (запланирована, но еще не реализована / протестирована, так что это всего лишь приблизительная идея ...)

  • иметь N рабочих (скажем, N = 10) опрашивать входящие (по файлам)
  • есть функция для расчета хеш-значения для каждого электронного письма
  • рабочий m получает электронное письмо, если: (его хэш% N) = m. таким образом каждое электронное письмо обрабатывается одним и только одним воркером, но проблема в том, что если воркер не работает, некоторые из писем никогда не будут обработаны! Как это побороть?

Спасибо, что сообщили мне свое мнение!


person Z. Lin    schedule 21.07.2013    source источник


Ответы (1)


Postfix - определенно правильный выбор. Идеи можно найти в следующих вопросах и ответах:

https://serverfault.com/questions/206477/processing-incoming-emails-with-python < / а>

Postfix - как обрабатывать входящие электронные письма?

person Rob Osborne    schedule 21.07.2013
comment
очень полезно. Большое спасибо! - person Z. Lin; 22.07.2013