Почему Celery увеличивает количество отправок по email

У моего celery есть задача отправлять уведомления клиенту на email.

В первый раз он отправил 1 сообщение. Во второй раз 2. В третий раз 3. В четвертый раз 5. В пятый раз 8 и так далее.

То есть с каждым разом функция по отправке отправляет все больше и больше сообщений. В Flower я вижу только одну задачу. Но на 1 задачу приходится много сообщений

В нужный момент вызывается эта задача. Она вызывает функцию client_notification_24_hour_email

@app.task
def client_notification_24_hour_email(order_id):
    order = get_help_session_by_id(order_id)
    if not order or order.changed_time or order.cancel_at or not order.client.email:
        return
    send_email_prompt_24_hour(order_id)

Эта функция вызывает отправку сообщения в виде HTML файла

# Отправка уведомления через EMAIL клиенту за 24 час до сеанса
def send_email_prompt_24_hour(order_id):
    order = HelpSession.objects.get(id=order_id)
    context = {
        'target_at': emaxple.target_at,
        'doctor_name': emaxple.doctor_name,
        'full_path': 'emaxple.path',
    }
    msg_html = render_to_string('email/email_notinfaction_24_hour.html', context=context)
    send_message_html(subject='Заголовок', message='', user_email=order.client.email, msg_html=msg_html)

Вот сама функция отправки HTML

# Функция отправляет сообщение на email в html формате
def send_message_html(subject, message, user_email, msg_html):
    mail.send_mail(subject, message, EMAIL_HOST_USER, [user_email], fail_silently=False, html_message=msg_html)

В чем может быть проблема? Почему функция send_email_prompt_24_hour выполняется много раз

UPD: Добавил использование client_notification_24_hour_email

def create_delayed_tasks_send_notification_client(order):
    if order.target_at - timedelta(hours=24) > timezone.now():
        client_notification_24_hour_email.apply_async([order.id], eta=(order.target_at - timedelta(hours=24)))

Настройки Celery

# Redis settings
REDIS_HOST = '0.0.0.0'
REDIS_PORT = '6379'

# Celery settings
timezone = 'Europe/Moscow'
broker_url = f'redis://{REDIS_HOST}:{REDIS_PORT}/0'
transport_option = {'visibility_timeout': 3600}
result_backend = f'redis://{REDIS_HOST}:{REDIS_PORT}/0'

access_content = ['application/json']
task_serializer = 'json'
result_serializer = 'json'

celery.py

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.local')

app = Celery("proj")
app.config_from_object('proj.local')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

Ответы (0 шт):