Отправка асинхронной электронной почты с сельдереем в проекте django

#python #django #email #celery #django-celery

#python #django #Адрес электронной почты #сельдерей #django-сельдерей

Вопрос:

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

это мой celery.py файл

 import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_project.settings')
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
app = Celery('django_project')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')
 

это мой views.py

 def kaiserdicke(request):
    successful_submit = check_newsletter_submission(request)
    if request.method == "POST":
        send_email_task.delay(
            'Information about Kaiseramp;Dicke',
            'Hello there!',
            'info @ xn - -denkmalgeschtztelofts - kic.de',
            [request.POST['email']]
                        )
        successful_submit = True
    return render(request, "denkmalgeschutztelofts/kaiserdicke.html",
                  {"successful_submit": successful_submit})
 

это мой tasks.py

 from celery import shared_task
from time import sleep

from django.core.mail import send_mail


@shared_task
def sleepy(duration):
    sleep(duration)
    return None
@shared_task
def send_email_task(subject,message,sender,recipients):
    sleep(30)
    send_mail(
        subject,message,sender,recipients
    )
    return None

 

возможно, некоторые соответствующие коды из settings.py

 CELERY_BROKER_URL = 'redis url'
CELERY_ACCCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

EMAIL_HOST = 'smtp.yandex.ru'
EMAIL_HOST_USER = 'email'
EMAIL_HOST_PASSWORD = '******'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

 

с терминала сельдерея — информация о работнике django_project -l, я получаю задание denkmalgeschutztelofts.tasks.send_email_task, выполненное успешно за 0,0309999999994907с.
Мне действительно нужна помощь в этом. Спасибо, хорошего дня.

ОБНОВЛЕНИЕ: итак, я выполнил часть задержки моей проблемы. Но есть еще одна проблема. Когда я заполняю электронную часть формы, а затем отправляю, у меня ошибка сервера 500. Почему это происходит?