Лучший подход к созданию объектов в фоновом режиме без использования системы очередей задач?

Я думал о лучшем подходе к созданию записи в фоновом режиме без использования django signals, или celery, и т.д.

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

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

Функция, которую мне нужно создать, должна запускаться после того, как пользователь отправит форму и форма будет полностью сохранена.

Я рассматривал возможность поддержки асинхронного режима.

https://docs.djangoproject.com/en/5.0/topics/async/

Рабочий процесс довольно прост:

  • Пользователь отправляет форму, обновляет ее и т. д.
  • Пользователь может продолжать перемещаться по приложению, пока моя функция для создания EmailTrackerRecord выполняется в фоновом режиме (ForeignKey для отправки формы).

Любой совет будет оценен по достоинству!

Вам не нужен запрос, вы можете использовать различные подходы:

  1. Выполните задачу ПОСЛЕ закрытия запроса:

     from django.http import TemplateResponse
    
     class DoAfterAnswer(TemplateResponse):
    
         def close(self):
             super().close()
             self.callback()
    
     class UpdateView(generic.UpdateView):
         response_class = DoAfterAnswer
         success_url = "thank_you/"
    
         def form_valid(self, form):
             form._save, form.save = form.save, lambda:form
             return super().form_valid(form)
    
         def render_to_response(self, context, **kwargs):
             response= super().render_to_response(context, **kwargs)
             response.callback = self.object._save
             return response
    

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

Вторая возможность - добавить задачу в кронтаб вашей системы.

Вернуться на верх