использование http persistent медленнее, чем непостоянное

#python #python-requests

#python #python-запросы

Вопрос:

Я настроил http-сервер, используя simplehttpserver. У меня есть 2 клиента, использующие библиотеку запросов. Оба запрашивают 100 файлов последовательно. Один использует постоянный, другой использует непостоянный. Отправляемые файлы имеют размер около 20 байт каждый. Вычисляется общее время. Результат: непостоянный быстрее, чем постоянный в 9/10 раз. Есть ли этому объяснение?

Сервер примеров кода:

 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
Handler.protocol_version = "HTTP/1.1" 
httpd = SocketServer.TCPServer(("", 8000), Handler)
httpd.serve_forever()
  

Клиент:

 header = {"Connection" : "close"} #remove for persistant
s = requests.session()
response = sess.get((url)   filename, headers=header)
  

Комментарии:

1. Можете ли вы предоставить несколько примеров вашего кода?

Ответ №1:

Я не могу воспроизвести это (Python 3.7).

С Connection: close заголовком я получаю примерно на 25% медленнее RPS.

server.py

 import socketserver
import http.server

PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
Handler.protocol_version = "HTTP/1.1" 
httpd = socketserver.TCPServer(("", PORT), Handler)
httpd.serve_forever()
  

client.py

 import requests
import time

def test(headers, n=1500):
    with requests.session() as sess:
        t0 = time.time()
        for x in range(n):
            assert sess.get('http://127.0.0.1:8000/server.py', headers=headers).content
        t1 = time.time()
        print(headers, n / (t1 - t0), 'rps')

test({})
test({"Connection": "close"})
test({"Connection": "keep-alive"})
  
 $ python3 client.py
{} 514.4191683333725 rps
{'Connection': 'close'} 424.7938184319337 rps
{'Connection': 'keep-alive'} 492.5251360628307 rps
  

Ответ №2:

Я не уверен, почему, но когда я запустил его, я получил следующий результат

 $ python3 client.py{} 22.51256576012429 rps
{'Connection': 'close'} 320.24445743902817 rps
{'Connection': 'keep-alive'} 22.209050176933395 rps