Ответ 1
Я написал вам полный тест, используя тривиальное приложение Flask, поддерживаемое gUnicorn/meinheld + nginx (для производительности и HTTPS), и посмотреть, сколько времени потребуется, чтобы завершить 10 000 запросов. Тесты выполняются в AWS на пару выгруженных экземпляров c4.large, а экземпляр сервера не ограничен ЦП.
TL; Резюме DR:, если вы много работаете, используйте PyCurl, иначе используйте запросы. PyCurl заканчивает небольшие запросы 2x-3x так же быстро, как запросы, пока вы не достигли предела пропускной способности с большими запросами (около 520 Мбит или 65 МБ/с здесь) и использует от 3х до 10 раз меньше мощности ЦП. Эти цифры сравнивают случаи, когда поведение пула соединений одинаково; По умолчанию PyCurl использует пулы соединений и кеши DNS, где запросов нет, поэтому наивная реализация будет в 10 раз медленнее.
Обратите внимание, что графики с двойным логом используются только для приведенного ниже графика, из-за используемых порядков
- pycurl занимает около 73 CPU-микросекунд, чтобы выдать запрос при повторном использовании соединения
- требуется 526 CPU-microseconds для запроса запроса при повторном использовании соединения
- pycurl занимает около 165 CPU-микросекунд, чтобы открыть новое соединение и выдать запрос (без повторного использования соединения) или ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
- требует около 1078 CPU-микросекунд, чтобы открыть новое соединение и выдать запрос (без повторного использования соединения) или ~ 552 микросекунды для открытия
Полные результаты приведены в ссылке, а также методология тестирования и конфигурация системы.
Предостережения:, хотя я приложил все усилия, чтобы гарантировать, что результаты собираются научным способом, они проверяют только один тип системы и одну операционную систему, а также ограниченную часть производительности и особенно параметры HTTPS.