Лучший подход к созданию объектов в фоновом режиме без использования системы очередей задач?
Я думал о лучшем подходе к созданию записи в фоновом режиме без использования django signals, или celery, и т.д.
Я не хочу использовать сигналы из-за того, что модель отправителя будет вызываться очень большое количество раз, так как эта таблица создается/обновляется довольно часто. Поэтому я хочу избежать такого подхода.
Моя цель - запустить функцию, которая проходит через сложную логику, заканчивающуюся созданием объекта EmailRecordTracker, в котором я выполняю отслеживание, чтобы определить, нужно ли отправлять электронное письмо или нет в более поздний момент времени.
Функция, которую мне нужно создать, должна запускаться после того, как пользователь отправит форму и форма будет полностью сохранена.
Я рассматривал возможность поддержки асинхронного режима.
https://docs.djangoproject.com/en/5.0/topics/async/
Рабочий процесс довольно прост:
- Пользователь отправляет форму, обновляет ее и т. д.
- Пользователь может продолжать перемещаться по приложению, пока моя функция для создания EmailTrackerRecord выполняется в фоновом режиме (ForeignKey для отправки формы).
Любой совет будет оценен по достоинству!
Вам не нужен запрос, вы можете использовать различные подходы:
Выполните задачу ПОСЛЕ закрытия запроса:
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
В этом случае сервер окончательно не видит ответа для пользователя, закрывает запрос и только после этого производит вычисления.
Вторая возможность - добавить задачу в кронтаб вашей системы.