web-dev-qa-db-fra.com

Python les requêtes accélèrent en utilisant keep-alive

Dans le protocole HTTP, vous pouvez envoyer de nombreuses demandes dans un socket en utilisant keep-alive, puis recevoir la réponse du serveur à la fois, ce qui accélérera considérablement l'ensemble du processus. Existe-t-il un moyen de le faire dans python request lib? Ou existe-t-il d'autres moyens d'accélérer cela si bien en utilisant request lib?

48
PaulOverflow

Oui il y a. Utilisation requests.Session et il fera le maintien en vie par défaut .

Je suppose que je devrais inclure un exemple rapide:

import logging
import requests

logging.basicConfig(level=logging.DEBUG)
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
s.get('http://httpbin.org/cookies/set/anothercookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

Vous noterez que ces messages de journal se produisent

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/sessioncookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 55
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies/set/anothercookie/123456789 HTTP/1.1" 302 223
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

Si vous attendez un peu et répétez le dernier get appel

INFO:requests.packages.urllib3.connectionpool:Resetting dropped connection: httpbin.org
DEBUG:requests.packages.urllib3.connectionpool:"GET /cookies HTTP/1.1" 200 90

Notez qu'il réinitialise la connexion interrompue, c'est-à-dire en rétablissant la connexion au serveur pour effectuer la nouvelle demande.

88
metatoaster