2009-08-08 19 views
6

Tôi đang viết một wrapper web API pythonic với một lớp học như thế nàyThực hành tốt nhất khi sử dụng httplib2.Http() đối tượng

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) 

như bạn có thể thấy tôi đang sử dụng phương pháp _http() để đơn giản hóa tương tác với đối tượng httplib2.Http(). Phương pháp này được gọi là khá thường xuyên bên trong lớp và tôi tự hỏi cách tốt nhất để tương tác với các đối tượng này là những gì:

  • tạo đối tượng trong __init__ và sau đó tái sử dụng nó khi các phương pháp _http() được gọi là (như thể hiện trong đoạn code trên)
  • hoặc tạo httplib2.Http() đối tượng bên trong phương pháp cho mọi cuộc gọi của _http() phương pháp (như trong mẫu mã bên dưới)

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) 

Trả lời

2

Bạn nên giữ đối tượng Http nếu bạn sử dụng lại kết nối. Có vẻ như httplib2 có khả năng tái sử dụng các kết nối theo cách bạn sử dụng nó trong mã đầu tiên của bạn, vì vậy đây trông giống như một cách tiếp cận tốt.

Đồng thời, từ kiểm tra nông cạn của mã httplib2, có vẻ như httplib2 không hỗ trợ dọn dẹp kết nối không sử dụng hoặc thậm chí để ý khi máy chủ quyết định đóng kết nối không còn muốn nữa. Nếu đó thực sự là trường hợp, nó trông giống như một lỗi trong httplib2 với tôi - vì vậy tôi thà sử dụng thư viện chuẩn (httplib) thay thế.

7

Cung cấp 'kết nối': 'gần' trong tiêu đề của bạn nên theo các tài liệu đóng kết nối sau một phản ứng nhận được .:

headers = {'connection': 'close'} 
resp, content = h.request(url, headers=headers) 
Các vấn đề liên quan