2009-08-08 6 views
6

Ich bin mit einer Klasse wie dieseBest Practice bei der Verwendung von httplib2.Http() Objekt

import httplib2 
import urllib 

class apiWrapper: 

    def __init__(self): 
     self.http = httplib2.Http() 

    def _http(self, url, method, dict): 
     ''' 
     Im using this wrapper arround the http object 
     all the time inside the class 
     ''' 
     params = urllib.urlencode(dict) 
     response, content = self.http.request(url,params,method) 

einen pythonic Web-API-Wrapper zu schreiben, wie Sie mir bin mit der _http() Methode sehen zu vereinfachen die Interaktion mit dem Objekt httplib2.Http(). Dieses Verfahren wird sehr oft in der Klasse genannt und ich frage mich, was der beste Weg ist, mit diesem Objekt zu interagieren:

  • das Objekt in dem __init__ erstellen und dann Wiederverwendung es, wenn die _http() Methode aufgerufen wird (wie gezeigt in dem obigen Code)
  • oder schaffen die httplib2.Http() Objekts innerhalb des Verfahrens für jeden Aufruf der Methode _http() (wie in dem Codebeispiel unten gezeigt)

import httplib2 
import urllib 


class apiWrapper: 

    def __init__(self): 

    def _http(self, url, method, dict): 
     '''Im using this wrapper arround the http object 
     all the time inside the class''' 
     http = httplib2.Http() 
     params = urllib.urlencode(dict) 
     response, content = http.request(url,params,method) 

Antwort

2

Sie sollten das Http-Objekt halten, wenn Sie Verbindungen wiederverwenden. Es scheint, dass httplib2 in der Lage ist, Verbindungen so zu verwenden, wie Sie es in Ihrem ersten Code verwenden, also sieht das nach einem guten Ansatz aus.

Gleichzeitig scheint es, dass httplib2 von einer oberflächlichen Prüfung des httplib2-Codes keine Unterstützung für das Bereinigen ungenutzter Verbindungen bietet oder sogar bemerkt, wenn ein Server entschieden hat, eine nicht mehr benötigte Verbindung zu schließen. Wenn das tatsächlich der Fall ist, sieht es für mich wie ein Fehler in httplib2 aus - daher würde ich stattdessen lieber die Standardbibliothek (httplib) verwenden.

7

Versorgung ‚Verbindung‘: ‚Schließen‘ in dem Header sollte nach dem docs die Verbindung schließen, nachdem eine Antwort empfangen wird .:

headers = {'connection': 'close'} 
resp, content = h.request(url, headers=headers) 
Verwandte Themen