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, чтобы гарантировать, что все параллельные запросы выполняются параллельно?
Что на самом деле делают эти настройки? Есть ли способ форкнуть процесс для каждого входящего запроса?