send_mass_mail в фоновом режиме django - PullRequest
2 голосов
/ 28 ноября 2011

Я использую send_mass_email для отправки электронных писем списку пользователей.Он работает нормально, пока я не отправлю более 200 писем за раз.На самом деле электронные письма доставляются без проблем.Но я получаю сообщение об ошибке тайм-аута от nginx, потому что отправка писем на все 200+ писем занимает много времени (более 2 минут).

Как лучше всего запустить send_mass_mail в фоновом режиме?

Ответы [ 4 ]

3 голосов
/ 28 ноября 2011

Вам нужно переместить задачи в фоновый режим (чтобы они не блокировали веб-процесс).Один из самых популярных способов сделать это - использовать очередь сообщений / задач.

Celery является одной из самых популярных распределенных очередей задач и в сочетании с django-Приложение сельдерея делает это тривиальным.

Сначала вам нужно настроить сельдерей (который так же прост, как pip install -U celery);и один из многих брокеров обмена сообщениями, которые он поддерживает.Наиболее популярным является RabbitMQ ;но для быстрой и грязной настройки вы также можете использовать существующую базу данных 1013 * в качестве посредника сообщений.

Наконец, поскольку это распространенная проблема, решаемая с помощью celery + django, существует django-celery-email , который позаботится обо всем остальном.

3 голосов
/ 28 ноября 2011

Возможно, вы захотите заглянуть в проект django-mailer , который инкапсулирует эту функциональность - он делает это через кроны, а не через очередь задач.Я использую его некоторое время с хорошими результатами.

1 голос
/ 28 ноября 2011

Вы можете отправлять письма в отдельной ветке, например:

t = threading.Thread(target=send_mass_email,
            args=[messages],
            kwargs={'fail_silently': True})
t.setDaemon(True)
t.start()

или просто использовать команды управления cron и django =) https://docs.djangoproject.com/en/dev/howto/custom-management-commands/

0 голосов
/ 28 ноября 2011

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

...