Why is Python 3 http.client so much faster than python-requests? : <p>I was testing different Python HTTP libraries today and I realized that <a href="https://docs.python.org/3/library/http.client.html" rel="noreferrer"><code>http.client</code></a> library seems to perform much much faster than <a href="http://docs.python-requests.org/en/master/" rel="noreferrer"><code>requests</code></a>. </p>

<p>To test it you can run following two code samples.</p>

<pre><code>import http.client

conn = http.client.HTTPConnection("localhost", port=8000)
for i in range(1000):
    conn.request("GET", "/")
    r1 = conn.getresponse()
    body = r1.read()
    print(r1.status)

conn.close()
</code></pre>

<p>and here is code doing same thing with python-requests:</p>

<pre><code>import requests

with requests.Session() as session:
    for i in range(1000):
        r = session.get("http://localhost:8000")
        print(r.status_code)
</code></pre>

<p>If I start SimpleHTTPServer:</p>

<pre><code>&gt; python -m http.server
</code></pre>

<p>and run above code samples (I'm using Python 3.5.2). I get following results:</p>

<p>http.client:</p>

<pre><code>0.35user 0.10system 0:00.71elapsed 64%CPU 
</code></pre>

<p>python-requests:</p>

<pre><code>1.76user 0.10system 0:02.17elapsed 85%CPU 
</code></pre>

<p>Are my measurements and tests correct? Can you reproduce them too? If yes does anyone know what's going on inside <code>http.client</code> that make it so much faster? Why is there such big difference in processing time?</p>
