Python / Django: отправка писем в фоновом режиме - PullRequest
13 голосов
/ 02 октября 2011

Представьте себе ситуацию, когда пользователь выполняет действие на веб-сайте и администраторы получают уведомление.Представьте, что есть 20 администраторов для уведомления.Используя обычные методы отправки электронных писем с помощью Django, пользователю придется подождать, пока все электронные письма не будут отправлены, прежде чем продолжить.

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

Ответы [ 3 ]

21 голосов
/ 02 октября 2011

Используйте celery в качестве очереди задач и django-celery-email , который является бэкэндом электронной почты Django, который отправляет электронную почту на задачу celery.

6 голосов
/ 20 марта 2013

Другой вариант - django-mailer.Он ставит почту в очередь в таблице базы данных, а затем вы используете задание cron для их отправки.

https://github.com/pinax/django-mailer

3 голосов
/ 02 октября 2011

Поток может быть возможным решением. Я интенсивно использую потоки в своем приложении для тяжелых задач.

# This Python file uses the following encoding: utf-8

#threading
from threading import Thread

...

class afegeixThread(Thread):

    def __init__ (self,usuari, parameter=None):
        Thread.__init__(self)
        self.parameter = parameter
        ...

    def run(self):        
        errors = []
        try:
             if self.paramenter:
                   ....
        except Exception, e:                
             ...
...

n = afegeixThread( 'p1' )
n.start()
...