Flask Истекло время ожидания шлюза EB 504 - PullRequest
1 голос
/ 02 августа 2020

Я новичок в flask и недавно создал приложение flask, в котором пользователь загружает файл xlsx и получает обратно другой файл xlsx после обработки.

Я разместил это приложение flask, используя AWS Уровень бесплатного пользования EB. Все работает нормально, если время обработки меньше 30 секунд. Но у меня бывают случаи, когда время обработки большое и неизвестное (15-20 минут). Когда вычисление велико, я получаю эту ошибку 504.

Я хотел бы знать, что было бы идеальным решением для обработки таких запросов. Я видел, как люди предлагали конфигурации ngnix и gunicorn, но я понятия не имею о них.

Было бы здорово, если бы кто-нибудь мог выделить время и дать представление о том, что можно сделать.

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Код ответа на ошибку сервера 504 Gateway Timeout протокола передачи гипертекста (HTTP) указывает, что сервер, выступая в качестве шлюза или прокси, не получил вовремя ответ от вышестоящего сервера, который ему нужен для заполните заявку. Срок действия запроса истек до того, как был дан ответ - MDN

Вам следует рассмотреть возможность выполнения интенсивной по времени обработки в качестве фоновой задачи. ( соответствующее руководство )

Если вам нужны две структуры приложений для ваших приложений, вы можете объединить (в модулях) их в одну, воспользовавшись преимуществами Flask чертежей .

1 голос
/ 02 августа 2020

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

Вам следует подумать об использовании дополнительных технологий, чтобы разделить обработку и возврат новый xlsx файл из исходного HTTP-запроса. Разделив их по отдельности, ваш конечный пользователь получит улучшенный опыт с меньшей вероятностью сбоя на этом пути (на данный момент все полагается на HTTP-запрос, если он терпит неудачу, весь процесс терпит неудачу).

Ваш HTTP Запрос должен будет принять файл xslx, после чего он должен сохранить файл и поставить в очередь обработку этого действия. Если вы сохранили файл в S3 , вы могли бы использовать S3-события для запуска Lambda для обработки этой обработки. Если вы выполняете последовательность событий, было бы более целесообразно разбить эти шаги на отдельные функции, которые могут быть запущены функцией Step .

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

...