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