dimanjy
@dimanjy
Недопрограммист и полуинженер.

Как правильно настроить uWSGI для Django?

Столкнулся с проблемой - не отправляется почта с сайта форума (вот вопрос).
Точнее отправляется только мне и иногда другим. Прописал SPF, DKIM и т.д. Отправляю через как бы "надежный" сервис pdd.yandex.ru.

Начал тестировать через mail-tester.com. Написал команду testmail для ./manage.py и играюсь из консоли - все письма до мейл-тестера доходят, выдает 10 баллов из 10, т.е. письмо идеальное!

Так вот, из консоли доходят, а с сервера - nginx -> uwsgi -> django - Ну ни в какую. Django радостно отчитывается формой "Ваше письмо отправлено", а на мейл-тестер не приходит ничего.

Начал копать исходники отправки почты в Django и набрел на такую вещь:

class EmailBackend(BaseEmailBackend):
    """
    A wrapper that manages the SMTP network connection.
    """
    def __init__(self, ...):
        # ... скипаем все и в самом конце - вот:
        self._lock = threading.RLock()

    def send_messages(self, email_messages):
        """
        Sends one or more EmailMessage objects and returns the number of email
        messages sent.
        """
        if not email_messages:
            return
        with self._lock:
            # ... ну и дальше, собственно, отправляет.
        return num_sent


Т.е. что же это получается? Django, выходит, создает отдельный поток для отправки почты по SMTP? Растолкуйте, пожалуйста!

Я читал (но до конца не понял), что в uWSGI нужно как-то отдельно настраивать правильную работу с потоками, иначе воркеры теряют связь с порожденными потоками и могут из-за этого возникать ошибки.

Я у себя для uWSGI в конфиге включил вот так:
[uwsgi]
...
master = true
processes = 4
enable-threads = true
single-interpreter = true
...


В итоге в htop вижу 4 воркера, каждый из которых сделал по одному потоку (игрался и с 2-умя потоками). Вроде потоки включены... Но поток с отправкой почты в Django либо не стартует либо мрет (наверное), т.к. почта-таки не отправляется. Точнее мне (почему-то) на все мне доступные ящики отправляется, а на мейл-тестер - не приходит :(

Растолкуйте, пожалуйста, про django + uwsgi + threads.
  • Вопрос задан
  • 384 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы