У меня есть веб-приложение, которое выполняет некоторый лингвистический анализ текстов, отправленных пользователем. Это довольно задача с интенсивным использованием памяти и обычно занимает продолжительный период времени (например, до 3 минут для обработки 30 файлов). Я использую функцию Django StreamingHttpResponse для выполнения этой работы, но заметил, что nginx отбрасывает запрос пользователя после обработки примерно 7 файлов (менее 50 секунд). Я попытался настроить параметры keep_alive для nginx и Gunicorn, но, похоже, это не сработало. Интересно, может ли кто-нибудь из присутствующих дать мне несколько советов по этому поводу?
Мне также интересно, как лучше всего решить задачу, требующую много времени для вычисления? Асинхронно?
I'm also wondering what is the best approach to tackle a task that takes a long time to compute? Asynchronously?
Для этого нужны рабочие очереди. Вам следует рассмотреть возможность отделения отправки файлов от обработки. Позвольте пользователю отправить файлы, сохранить их, добавить сообщение в рабочую очередь для их обработки, действительно асинхронно. Пользователь продолжает свои дела, может видеть экран загрузки, но он больше не связан с этим веб-сеансом.
Между тем, отдельный процесс выбирает новые задачи из рабочей очереди, обрабатывая каждую независимо от того, что делает пользователь. Существует множество таких систем очередей, например Amazon AWS SQS:
Я вижу, что никто не ответил, поэтому я набрал ваш вопрос в Google и нашел эту страницу . Вы пытались увеличить все применимые тайм-ауты, как это предлагает? Кажется, это первое, что нужно сделать.