Python - многопоточность с Cheroot

Я унаследовал большое приложение на Python, которое использует бутылку и сигару в качестве веб-сервера. Он предоставляет и api, который в основном читает файл и сопоставляет некоторые данные, чтобы предоставить клиенту ответ JSON.

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

Я создал простой node.js файл, который использует requestи вызывает API одновременно с 7 запросами. Запросы возвращаются в другом порядке (как и следовало ожидать). Один запрос обычно занимает около 10-15 секунд.

Используя стандартные настройки сигары времени отклика для тестовых выглядеть следующим образом :

      Request time in seconds 89.897, Response status: 200, Request No:  3
Request time in seconds 128.723, Response status: 200, Request No: 6
Request time in seconds 138.62, Response status: 200, Request No:  5
Request time in seconds 150.323, Response status: 200, Request No: 1
Request time in seconds 161.493, Response status: 200, Request No: 4
Request time in seconds 166.608, Response status: 200, Request No: 0
Request time in seconds 171.969, Response status: 200, Request No: 2

Довольно плохо, верно. Затем я изменил Cheroot настройки на основе некоторой проблемы с github, которую я видел:

      server.request_queue_size = 128  # Larger socket queue buffer than the default 5
server.accepted_queue_size=128
server.numthreads=100
server.max=4
server.start()

Затем я снова провожу свой тест, и теперь он выглядит так:

      Request time in seconds 9.254, Response status: 200, Request No:  4
Request time in seconds 9.675, Response status: 200, Request No:  1
Request time in seconds 10.412, Response status: 200, Request No:  7
Request time in seconds 88.716, Response status: 200, Request No:  3
Request time in seconds 133.943, Response status: 200, Request No:  6
Request time in seconds 136.858, Response status: 200, Request No:  5
Request time in seconds 154.181, Response status: 200, Request No:  0
Request time in seconds 159.424, Response status: 200, Request No:  2

Может ли кто-нибудь объяснить мне, что здесь происходит. Результаты будут стабильными, если я запустил их снова несколько раз. Почему после третьего запроса он замедляется, и есть ли какой-либо параметр, который я мог бы попробовать в Cheroot, чтобы гарантировать, что все параллельные запросы выполняются параллельно?

Что на самом деле делают эти настройки? Есть ли способ форкнуть процесс для каждого входящего запроса?

0 ответов

Другие вопросы по тегам