Я столкнулся с проблемой, связанной с обработкой нескольких одновременных запросов на моем сайте. Чтобы объяснить подробно - у меня есть представление django, которое получает файл из запроса, а затем вызывает api, выполняет некоторые вычисления и, наконец, отправляет ответ. Обычно сайт работает нормально, но при одновременном получении 100-150 запросов сайт становится очень медленным. После некоторого исследования я обнаружил, что Django является синхронным, и пулеметчики отправляют запросы своим рабочим, что означает, что одновременно сервер может обрабатывать количество запросов рабочих, а другие запросы ставятся в очередь. В моем случае номер рабочего - 3.
Я обнаружил, что gunicorn может использовать асинхронный рабочий класс, такой как gevent, который не дожидается завершения запроса и получает другой запрос. Но после изменения конфигурации gunicorn на --worker-class = gevent и --worker-connection = 1000 мой сайт не отвечает для этого конкретного представления только после того, как я загружаю файлы. В чем может быть проблема?
Моя цель - получить запрос, начать его обработку (вызов api третьей стороны и расчет на моем сервере) и получить другой запрос, даже если обработка предыдущего запроса не завершена. Что я должен делать? Следует отметить, что у меня есть 1 основной ЦП, и у меня есть событие ввода-вывода при обработке запроса - сторонний вызов api, а также событие ЦП - вычисление с результатом api. Вычисления, о которых я говорил выше, - это наш собственный код. Я обнаружил, что у gevent есть некоторые проблемы с этим, поскольку он исправляет только общие библиотеки python и django. пожалуйста, посоветуйте мне, что мне делать?
Заранее спасибо.