Использование Django Handling Public API (анонимные пользователи обращаются к API)

Я делаю простой сайт с Django в качестве бэкенда. В идеале, вы должны иметь возможность использовать его без создания учетной записи, и тогда все ваши сохраненные там элементы ("заметки") будут видны любому.

На данный момент я создал фиктивного пользователя на Django, и каждый раз, когда анонимный пользователь делает вызов API для добавления/удаления/изменения заметки, на стороне Django он выбирает фиктивного пользователя в качестве пользователя.

Это бы работало нормально (я думаю), но один из API Django может выполняться очень долго (~1-2 минуты). Это означает, что если несколько человек пытаются сделать вызовы API, будучи анонимными, то в какой-то момент сервер зависнет, пока не закончится выполнение длинного API.

Есть ли способ передать такой случай на стороне сервера, чтобы предотвратить замораживание сервера?

Как ответил Сорин в комментариях, я бы пошел по пути Celery. В принципе, вы можете создать модель, которая собирает данные о том, когда была запущена последняя задача Celery - и, например, если она не выполнялась в течение последних 24 часов, а пользователь посещает сайт, вы запускаете задачу снова асинхронным способом.

Для этого вам даже не придется использовать вызовы AJAX, поскольку отправка задачи в Celery достаточно быстра, чтобы вызвать ее на методах get_context_data() или dispatch(). Вы можете перегрузить и другие, но эти методы являются самыми быстрыми и безопасными для переопределения.

Надеюсь, ответ поможет вам!

Вы упомянули, что одна из ваших конечных точек API выполняет задачу, которая занимает очень много времени, что означает, что у вас уже есть задача или процесс, который может блокировать цикл http запрос-ответ. Что вы можете сделать, так это запустить требующую много времени (или долго выполняющуюся) задачу асинхронно, используя celery или другие очереди задач.

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