Обработка нескольких параллельных запросов в Django, Gunicorn, Nginx - PullRequest
0 голосов
/ 07 февраля 2020

У меня возникли некоторые проблемы, связанные с одновременной обработкой нескольких запросов на моем сайте.

Чтобы объяснить подробно - у меня есть представление Django, которое получает файл из запроса, а затем вызывает API, выполняет некоторые вычисления и, наконец, отправляет ответ.

Обычно сайт работает нормально, но при одновременном получении 100-150 запросов сайт работает очень медленно. После некоторых исследований я обнаружил, что Django является синхронным и запросы делегатов gunicorn к его рабочим, это означает, что сервер может одновременно обрабатывать количество рабочих запросов, а другие запросы помещаются в очередь. В моем случае, число рабочих равно 3.

Я обнаружил, что gunicorn может использовать асинхронный рабочий класс, такой как gevent, который не ожидает завершения запроса sh и получает другой запрос. Но после изменения конфигурации gunicorn на worker-class=gevent и worker-connection=1000 мой сайт не отвечает за этот указанный c просмотр только после того, как я загружаю файлы. В чем здесь может быть проблема?

Моя цель - получить запрос, начать его обработку (сторонний вызов API и вычисления на моем сервере) и получить другой запрос, даже если предыдущий запрос не завершил обработку , Что мне делать? Стоит отметить, что у меня есть одно ядро ​​ЦП, и у меня есть как событие ввода-вывода при обработке запроса - сторонний вызов API, так и событие ЦП - вычисление с результатом API. Вычисление, которое я упомянул выше, является нашим собственным кодом. Я обнаружил, что у gevent есть некоторые проблемы с этим, поскольку он исправляет только общие библиотеки python и Django. подскажите пожалуйста что мне делать?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...